我有一个带有类的 dll,该类在其中定义了一些方法和变量。我把它标记为
__declspec(dllexport)
我在同一个解决方案中的 win32 应用程序项目中导入了 .h 标头。我可以使用这些函数,但是当我尝试编译项目时,我遇到了很多关于未解析外部符号的错误。为什么?
对于要导入该类的应用程序,您需要将该类标记为
__declspec(dllimport)
而不是dllexport
.
您还必须确保链接到 DLL 的导入库(一个 .lib 文件)。
请在此处阅读有关在此非常常见的任务中使用宏的标准方法:http ://wiki.tcl.tk/8721
基本思想是你定义一个宏,MY_API
像这样说:
#ifdef BUILD_MYAPI
# define MY_API __declspec(dllexport)
#else
# define MY_API __declspec(dllimport)
#endif
当你在头文件中声明一个函数或一个类时,你这样做:
void MY_API myApiFunction(int x);
当您构建自己的声明函数主体的 dll 时,您将定义添加BUILD_MYAPI
到构建中。这使得所有 declerations 都是dllexport
当您包含来自其他一些您未添加BUILD_MYAPI
的 dll 的标头时,因此减速是dllimport
当使用 Visual Studio 编译时,您可以将宏定义添加到编译中,而无需从项目属性更改源 - > C/ C++ -> 预处理器 -> 预处理器定义