C ++如何在def文件

时间:2017-08-21 03:12:31

标签: c++ dllexport

" TestDLL.h"

namespace atest
{
    void HelloWorld();
}

namespace btest
{
    void HelloWorld();
}

我尝试通过def文件导出dll函数。有两个具有相同名称的函数,但在不同的命名空间中。我写这样的def文件:

LIBRARY "TestDLL"
EXPORTS
    HelloWorld @1

视觉工作室显示"错误LNK2001:未解析的外部符号HelloWorld"。我无法找到有关如何在def文件中指定命名空间的任何有用信息。我想知道如何解决这个问题。我很感激你的帮助。

1 个答案:

答案 0 :(得分:3)

Def文件必须包含装饰名称。 (即编译器和链接器看到的函数名称)

您可以阅读Microsoft's site的详细信息,但这里是相关部分:

  

如果要在C ++文件中导出函数,则必须将修饰的名称放在.def文件中,或者使用extern“C”定义标准C链接的导出函数。如果需要将修饰后的名称放在.def文件中,可以使用DUMPBIN工具或使用链接器/ MAP选项获取它们

就个人而言,我更喜欢使用/MAP。我发现它比使用DUMPBIN的瑞士军刀要简单得多。

供参考here是指一般装饰名称文档的链接。