使用NMAKE编译vc++ DLL
VC++ DLL compilation using NMAKE
我有一个使用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)
相关文章:
- 使用线程 C# 中的 VC++ 6.0 COM DLL
- 如果使用低于 VS2015 的 vc++ 编译器版本编译,则 DLL 中的访问冲突
- 如何在VC++中使用.lib、.dll和.exp文件
- 在swig.i文件中,如何为基于mfc的第三方dll解析ms-windows-vc++typedef类型
- 创建Cuda dll并在VC++项目中使用它
- VC++ dll 代码区域未更新:VS2010
- 缺少新的空VC 控制台项目的MFC71.dll
- 获取传递给子模块(C#.NET dll)中的主模块(VC++ exe)的参数
- 使用ITK或OpenCV库将现有的VC++项目转换为DLL是可能的吗
- VC++ vector::p ush_back "Access Violation" in DLL
- 引用VC++代码或转换为DLL
- DLL 项目上的 VC++ 编译错误
- 是否可以在不安装可分发的 VC++ 包的情况下将 MSVCRT DLL 与我的应用捆绑在一起
- 在我的项目中调用 64 位 Dll,32 位 VC++
- 如何从 VC++ 调用托管 DLL(使用 GUI)
- 使用 VC++ 创建跨计算机 DLL
- dll从VC++导入到VB函数的转换从dll返回错误,因为缺少链接库
- 在我的发布应用程序 (VC++ 2013) 中摆脱 msvcr120.dll/msvcp120.dll依赖项
- 我可以用VC++2008创建Dll并在VC++6中使用它吗
- VC++6.0生成.COM DLL中的TLH导致错误