我有一个带有类的DLL,用于定义其中的一些方法和变量。我把它标记为
__declspec(dllexport)
我在同一解决方案中的win32应用程序项目中导入了.h标头。我可以使用这些函数但是当我尝试编译项目时,我有很多关于外部符号未解决的错误。为什么呢?
答案 0 :(得分:2)
对于要导入该类的应用程序,您需要将该类标记为
__declspec(dllimport)
而不是dllexport
。
您还必须确保链接DLL的导入库(.lib文件)。
答案 1 :(得分:2)
请在此处阅读有关使用宏执行此常见任务的标准方法: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
的定义添加到构建中。这使得所有的变化都为dllexport
如果您包含来自其他dll的标题,则不添加BUILD_MYAPI
,因此减速为dllimport
使用visual studio进行编译时,可以在不更改项目属性的源的情况下向编译添加宏定义 - > C / C ++ - >预处理 - >预处理器定义