Как скомпилировать DLL, которая не требует внешнего файла манифеста?

Я хотел бы скомпилировать DLL-библиотеку под Visual Studio 2008, которая зависит от msvcr90.dll, как частную сборку (в основном я дам эту DLL-библиотеку в тот же каталог, что и мое приложение) без необходимости внешнего файла манифеста.

Я выполнил шаги, описанные в разделе http://msdn.microsoft.com/en-us/library/ms235291.aspx"Развертывание библиотек DLL Visual C++ в виде частных сборок", но вместо использования внешнего файла манифеста (например, Microsoft.VC90.CRT.manifest) Я хотел бы как-то встроить его в DLL.

Если я встраиваю Microsoft.VC90.CRT.manifest в msvcr90.dll или в библиотеку DLL, загружающую его, и удаляю внешний файл манифеста, LoadLibrary() завершается ошибкой.

Проблема в том, что когда вы встраиваете манифест в DLL, он фактически встраивает следующее:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false">
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
    </dependentAssembly>
  </dependency>
</assembly>

Я думаю, что строка является причиной ее смерти, если файл манифеста отсутствует. Есть идеи?

1 ответ

Решение

Добавьте следующее в определения препроцессора:

_CRT_NOFORCE_MANIFEST
Другие вопросы по тегам