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

发布于 2024-10-17 07:42:11 字数 179 浏览 7 评论 0原文

我有一个 dll,其中有一个类,在其中定义了一些方法和变量。我将其标记为

__declspec(dllexport)

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

I have a dll with a class that define some methods and variables inside it. I marked it as

__declspec(dllexport)

and i imported the .h header inside a win32 application project in the same solution. I can use the functions but when I try to compile the project I have a lot of errors about external symbols not resolved. Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小嗲 2024-10-24 07:42:11

请在此处阅读有关使用宏来完成此非常常见任务的标准方法: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++->预处理->预处理器定义

Please read about the standard way of using macros for this very common task here: http://wiki.tcl.tk/8721

The basic idea is that you define a macro, say MY_API like so:

    #ifdef BUILD_MYAPI
    #    define MY_API __declspec(dllexport)
    #else
    #    define MY_API __declspec(dllimport)
    #endif

When you declare a function or a class in the header file you do this:

void MY_API myApiFunction(int x);

When you build your own dll which declares the body of the function, you add the definition of BUILD_MYAPI to the build. This makes all declerations to be dllexport
when you include the header from some other dll you don't add BUILD_MYAPI so the decelerations are dllimport
When compiling with visual studio, you can add a macro definition to the compilation without changing the source from project properties -> C/C++ -> Preprocesson -> Preprocessor definitions

影子的影子 2024-10-24 07:42:11

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

__declspec(dllimport)

代替dllexport

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

For the application where you want to import that class, you will need to mark the class as

__declspec(dllimport)

Instead of dllexport.

You must also make sure to link with the import library of the DLL (a .lib file).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文