7

我继承了一个巨大的 C++多项目解决方案,其中包含许多动态库,但没有任何

__declspec(dllexport)

了解到,不一定要插入任何dllexport (工作量很大),但是除了相应的.dll之外,还可以使用.def文件。

为了尝试我从这里构建了一个“DLL Hello World”项目,从标题中删除了dllexport并且......拼命失败。用已经引用的页面的话来说,我的关键问题是如何

"[..] use the .def file when building the DLL."

我的.def文件是(我仅使用Add方法尝试代码):

LIBRARY   MathFuncsDll
EXPORTS 
?Add@MyMathFuncs@MathFuncs@@SANNN@Z

在 Visual Studio 2010 中构建 DLL 以导出Add方法时如何使用它?

4

1 回答 1

12

在这个问题面前过了半天,我才找到了解决方案:这里有描述。

用我自己的话在 VS2010中恢复使用.def文件导出符号的过程:

  1. 告诉 VS2010 编译一个动态库(.dll)。这是在库项目的属性页中完成的。
  2. 通过使用修饰(修饰)名称(至少当您的语言是 C++ 时)来制作模块定义文件 (.def )。如果您使用dllexport您可以显示已导出的您的 .dll 符号,如此处所述。如果您还没有导出任何内容,请参阅帖子。
  3. 将 .def 添加到其属性页中的库定义中。
  4. 编译
  5. 验证您工作的正确性,例如使用Dependency Walker打开依赖文件,例如.exe。您应该在依赖文件下方的依赖树中看到刚刚编译的库。应该没有错误或警告,例如没有红色

如果您对.def文件还有其他疑问,请查看“模块定义文件”这一术语。

于 2013-01-18T16:45:00.670 回答