在cpp文件中需要__declspec(dllexport)

可能是一个简单的问题,但我只有Linux来testing这个代码上不需要__declspec(dllexport)的地方。 在当前的代码中__declspec(dllexport)在.h文件中的所有文件前,但在cpp文件中的50%的function之前,所以我想知道它们是否真的需要在cpp文件中?

不,它只在头上需要。

这里有更多信息的链接 。

在Vinay的发言中,我经常看到一个宏观的定义

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

然后在你的头部你做

 void EXPORTED foo(); 

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

不,在cpp文件中不需要。 只有在声明中是必需的。

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

.h服务器代码

__declspec(dllexport)CMyClass {};

在客户端代码中,即使用这个类,你必须将类声明为

客户端代码

__declspec(dllimport)CMyClass;

//使用该类的代码

你也可以在.cpp文件中使用,当你有模板代码,并且在.cpp文件中实例化时,你需要在实例化时导出定义。 但即使在这种情况下,我也已经看到,在.h做的也是有效的。 在Windows上,您可以使用dumpbin.exe / exports * .dll来查看导出的签名,Linux中也有类似的实用程序。 这会给你一个想法如何导出签名。