dllimport和dllexport之间的联系

gee*_*eek 5 c++ windows dll

我对Windows中的C++中的dllexport,dllimport有一些疑问.让我们假设我有一些module.cppmodule.h使用哪些导出函数dllexport.让我们假设我也有moduleWrapper.cppmoduleWrapper.h从进口功能module.cpp使用dllimport.

有人可以解释为什么我会想念#include module.hmoduleWrapper.cpp和我的写作moduleWrapper.h.我无法理解链接器如何知道module.cpp中的函数地址,提前感谢任何解释

小智 7

根据我的理解,你在module.h中有这样的东西:

__declspec(dllexport) void f();
Run Code Online (Sandbox Code Playgroud)

然后,您在moduleWrapper.cpp中有类似的声明:

__declspec(dllimport) void f();
Run Code Online (Sandbox Code Playgroud)

这被视为函数声明,因此您不需要包含module.h.通常的方法是将以下代码放入包含文件中:

#ifdef PROJECTNAME_EXPORTS // (the default macro in Visual Studio)
#define PROJECTAPI __declspec(dllexport)
#else
#define PROJECTAPI __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

然后在头文件中声明您的函数,如下所示:

PROJECTAPI void f();
Run Code Online (Sandbox Code Playgroud)

这样,当您编译DLL时,它将转换为dllexport,并且在任何不属于您的DLL且恰好使用标头的文件中进行dllimport.