导出DLL类和函数并将它们导入Win32应用程序

时间:2011-02-13 11:23:08

标签: c++ dllimport dllexport

我有一个带有类的DLL,用于定义其中的一些方法和变量。我把它标记为

__declspec(dllexport)

我在同一解决方案中的win32应用程序项目中导入了.h标头。我可以使用这些函数但是当我尝试编译项目时,我有很多关于外部符号未解决的错误。为什么呢?

2 个答案:

答案 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 ++ - >预处理 - >预处理器定义