1

我有一个带有类的 dll,该类在其中定义了一些方法和变量。我把它标记为

__declspec(dllexport)

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

4

2 回答 2

2

对于要导入该类的应用程序,您需要将该类标记为

__declspec(dllimport)

而不是dllexport.

您还必须确保链接到 DLL 的导入库(一个 .lib 文件)。

于 2011-02-13T11:30:44.647 回答
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到构建中。这使得所有 declerations 都是dllexport
当您包含来自其他一些您未添加BUILD_MYAPI的 dll 的标头时,因此减速是dllimport
当使用 Visual Studio 编译时,您可以将宏定义添加到编译中,而无需从项目属性更改源 - > C/ C++ -> 预处理器 -> 预处理器定义

于 2011-02-13T11:34:24.520 回答