使用DEF从Visual Studio 2010中的DLL导出函数

Fin*_*ter 7 c++ dll visual-studio-2010

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

__declspec(dllexport)
Run Code Online (Sandbox Code Playgroud)

了解到一个人不一定要插入任何dllexport(会有很多工作),但除了相应的.dll之外,还可以使用.def文件.

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

"[..] use the .def file when building the DLL."
Run Code Online (Sandbox Code Playgroud)

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

LIBRARY   MathFuncsDll
EXPORTS 
?Add@MyMathFuncs@MathFuncs@@SANNN@Z
Run Code Online (Sandbox Code Playgroud)

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

Fin*_*ter 12

在这个问题前面已经通过了半天后,我就找到了解决方案:它被描述在这里.

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

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

如果您对.def文件有其他疑问,请查看终端"模块定义文件".

  • 在我的情况下,我不愿意在已有代码的数百个文件中添加**_dllexport_.特别是因为它可能在未来发生变化(而不是我的变化).实际上,该代码是为MinGW开发的.我的**希望**是**在没有任何代码更改的情况下自动导出.** (2认同)