使用NMAKE编译vc++ DLL

VC++ DLL compilation using NMAKE

本文关键字:DLL vc++ 编译 NMAKE 使用      更新时间:2023-10-16

我有一个使用Visual Studio 2005编译的DLL文件,当我从c#程序调用这些函数(在DLL中)时,它工作得很好。但是,如果我用NMAKE编译相同的程序,它可以成功编译,但它不能与c#程序一起工作。我得到一个"DLL NOT FOUND EXCEPTION"或"DLL IS CORRUPT"。

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:"srcXXX.def" /DELAY:UNLOAD /MACHINE:X86 /ERRORREPORT:PROMPT mqrt.lib ..(other lib files)..

Edit:如果我使用dumpbin,使用NMAKE编译的DLL中的"HEADERS","EXPORTS","SYMBOLS"的大小都小于使用Visual studio编译的DLL !

我知道我的错了。我只是没有包括实际编译的一部分。我想这是最重要的部分。

将清单文件嵌入到DLL

Mt.exe文件是生成签名文件和目录的工具。我发现了这个链接,它很有用。

p。S:我学到了这个。编译DLL的三个重要部分是:

  • 编译器(CL.exe)
  • 链接器(LINK.exe)
  • 嵌入清单(MT.exe)