dllimport和dllexport之间的链接

我有一些关于dllexport,dllimport在Windows中的C + +的问题。 假设我有一些使用dllexport导出函数的module.cppmodule.h 。 假设我也有moduleWrapper.cppmoduleWrapper.h ,它使用dllimportmodule.cpp导入函数。

有人可以请解释我为什么可以错过在我的moduleWrapper.cppmoduleWrapper.h写入#include module.h moduleWrapper.h 。 我不明白如何链接器知道module.cpp函数的地址,预先感谢任何解释

从我的理解,你有这样的module.h:

 __declspec(dllexport) void f(); 

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

 __declspec(dllimport) void f(); 

这是一个函数声明,所以你删除任何需要包含module.h。 通常的做法是将下面的代码放在包含文件中:

 #ifdef PROJECTNAME_EXPORTS // (the default macro in Visual Studio) #define PROJECTAPI __declspec(dllexport) #else #define PROJECTAPI __declspec(dllimport) #endif 

然后在头文件中声明你的函数,像这样:

 PROJECTAPI void f(); 

这样,当你编译你的DLL的时候,它会转换成dllexport,并且在任何不属于你的DLL的文件中碰到使用这个头的文件。