dllimport和dllexport之间的联系

时间:2011-08-07 20:30:01

标签: c++ windows dll

我对Windows中的C ++中的dllexport,dllimport有一些疑问。我们假设我有module.cppmodule.h使用dllexport导出函数。我们假设我还moduleWrapper.cppmoduleWrapper.h使用module.cppdllimport导入函数。

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

1 个答案:

答案 0 :(得分:7)

根据我的理解,你在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且恰好使用标头的文件中进行dllimport。