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

Zit*_*rax 11 c++ windows dll

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

Dou*_* T. 13

不,它只需要在标题中.

这是一个包含更多信息的链接.

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

#if defined(MODULENAME_IMPORT)
#define EXPORTED __declspec(dllimport)
#elif defined(MODULENAME_EXPORT)
#define EXPORTED __declspec(dllexport)
#endif
Run Code Online (Sandbox Code Playgroud)

然后在你的标题中你做

void EXPORTED foo();
Run Code Online (Sandbox Code Playgroud)

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


Vin*_*nay 6

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

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

.h服务器代码

__declspec(dllexport)CMyClass {};

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

客户代码

__declspec(dllimport)CMyClass;

//使用该类的代码