我有一些关于 Windows 中 C++ 中的 dllexport、dllimport 的问题。假设我有一些 module.cpp
和 module.h
,它们使用 dllexport
导出函数。假设我还有 moduleWrapper.cpp
和 moduleWrapper.h
,它使用 dllimport
从 module.cpp
导入函数.
有人能解释一下为什么我会错过在我的 moduleWrapper.cpp
和 moduleWrapper.h
中编写 #include module.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 的任何文件中转换为 dllimport,而这些文件恰好正在使用 header 。
关于c++ - dllimport 和 dllexport 之间的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6975578/