导出 DLL 类和函数并将其导入 Win32 应用程序
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请在此处阅读有关使用宏来完成此非常常见任务的标准方法:http://wiki.tcl.tk/8721 基本思想是定义一个宏
,例如
MY_API
:当您在头文件中声明一个函数或类时,您会执行以下操作:
当您构建自己的 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:When you declare a function or a class in the header file you do this:
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 bedllexport
when you include the header from some other dll you don't add
BUILD_MYAPI
so the decelerations aredllimport
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
对于要导入该类的应用程序,您需要将该类标记为
代替
dllexport
。您还必须确保链接到 DLL 的导入库(.lib 文件)。
For the application where you want to import that class, you will need to mark the class as
Instead of
dllexport
.You must also make sure to link with the import library of the DLL (a .lib file).