可能是一个简单的问题,但我只有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中也有类似的实用程序。 这会给你一个想法如何导出签名。