Компиляция DLL VC++ с использованием NMAKE

У меня есть файл DLL, скомпилированный с использованием Visual Studio 2005, и он отлично работает, когда я вызываю эти функции (в DLL) из программы на С#. Но если я скомпилирую ту же программу с помощью NMAKE , она успешно скомпилируется, но не будет работать с программой C#. Я получаю сообщение "DLL НЕ НАЙДЕНА ИСКЛЮЧЕНИЕМ" или "DLL ПОВРЕЖДЕНА".

P.S. Я скопировал все параметры компилятора и компоновщика из исходного файла проекта и использовал их в MakeFile, но все равно бесполезно. Что мне здесь не хватает?

Параметры компилятора и компоновщика следующие:

Compiler opt: /O2 /Ob1 /D "WIN32" /D "NDEBUG" /D "_WRITE_LOGS" /D "_VC80_UPGRADE=0x0700" /D "_WINDLL" /D "_MBCS" /Fo"obj\\" /FD /EHsc /MD /W3 /nologo /c /Gz /TP /errorReport:prompt 

Linker opt: /OUT:"dll/XXX.dll" /INCREMENTAL:NO /NOLOGO /DLL /DEF:"src\XXX.def" /DELAY:UNLOAD /MACHINE:X86 /ERRORREPORT:PROMPT mqrt.lib ..(other lib files)..

Редактировать: Если я использую dumpbin, размер "HEADERS", "EXPORTS", "SYMBOLS" меньше в DLL, скомпилированной с помощью NMAKE, чем в DLL, скомпилированной с помощью Visual. студия!


person rampireram    schedule 16.06.2014    source источник


Ответы (1)


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

Встраивание файла манифеста в DLL

Файл Mt.exe — это инструмент, который создает подписанные файлы и каталоги. Я нашел эту ссылку, и она оказалась очень полезной.

P.S. Я узнал об этом. Три важные части компиляции DLL:

  • КОМПИЛЯТОР (CL.exe)
  • ЛИНКЕР (LINK.exe)
  • Манифест внедрения (MT.exe)
person rampireram    schedule 16.06.2014
comment
Использование mt.exe фактически представляет файл .def с DLL, тем самым помогая другим приложениям находить функции в DLL. - person rampireram; 06.08.2014