cpp文件中是否需要__declspec(dllexport)

时间:2009-02-17 15:21:19

标签: c++ windows dll

可能是一个简单的问题,但我只有Linux来测试不需要__declspec(dllexport)的代码。在当前的代码中__declspec(dllexport)位于.h文件中的所有文件的前面,但就在cpp文件中50%的函数前面,所以我想知道它们是否真的需要在cpp文件中?

3 个答案:

答案 0 :(得分:14)

不,它只需要在标题中。

这是一个link,其中包含更多信息。

扩展Vinay所说的话,我经常看到一个宏定义

#if defined(MODULENAME_IMPORT)
#define EXPORTED __declspec(dllimport)
#elif defined(MODULENAME_EXPORT)
#define EXPORTED __declspec(dllexport)
#endif

然后在你的标题中

void EXPORTED foo();

在执行导入/导出的项目的项目设置中相应地设置定义。

答案 1 :(得分:7)

不,在cpp文件中不需要它。只有在声明中才需要它。

例如,如果我有一个类CMyClass。如果我想导出它,那么.h将有

.h服务器代码

__ declspec(dllexport)CMyClass { };

在客户端代码中,即使用此类,您必须将类声明为

客户端代码

__ declspec(dllimport)CMyClass;

//使用类

的代码

答案 2 :(得分:2)

当您使用模板化代码并且在.cpp文件中实例化时,也可以在.cpp文件中使用,然后在实例化时需要导出定义。但即使在这种情况下,我也看到在.h中也可以。在Windows上,您可以使用dumpbin.exe / exports * .dll来查看导出的签名,Linux中也有类似的实用程序。这将让您了解如何导出签名。