首页 / 知识
关于Windows:从DLL导出C ++类
2023-04-13 05:36:00

Exporting a C++ class from a DLL
我的大多数C / C ++开发都涉及整体模块文件,并且绝对没有类,因此通常当我需要使用可访问函数制作DLL时,我只是使用标准 当您要导出整个类(及其所有公共方法和属性)时,该怎么做? 是否可以在运行时动态加载该类? 您将如何使用标头和lib进行编译时链接?
因此,有两种加载DLL的方法。第一种是引用DLL中的一个或多个符号(例如,您的类名),提供适当的import .LIB,然后让链接程序找出所有内容。 第二个是通过LoadLibrary显式加载DLL。 两种方法都适用于C级函数导出。您可以让链接程序处理它,也可以按照您的说明调用GetProcAddress。 但是,对于导出的类,通常仅使用第一种方法,即隐式链接到DLL。在这种情况下,DLL是在应用程序启动时加载的,如果找不到DLL,则应用程序将无法加载。 如果要链接到DLL中定义的类,并且希望在程序启动后的某个时间动态加载该DLL,则有两个选择: 使用特殊的工厂函数创建该类的对象,该函数在内部必须使用(一小部分)汇编程序将新创建的对象"连接"到其适当的偏移量。显然,这必须在DLL加载后的运行时完成。在这里可以找到有关此方法的很好的解释。 使用延迟加载DLL。 考虑到所有问题,最好只使用隐式链接,在这种情况下,您肯定要使用上面显示的预处理器技术。实际上,如果您在Visual Studio中创建一个新的DLL并选择"导出符号"选项,则会为您创建这些宏。 祝好运... 构建DLL和将使用DLL的模块时,请使用某种#define来区分彼此,然后可以在类头文件中执行以下操作:
编辑:crashmstr击败了我! 添加一个简单的工作示例以从DLL导出C ++类: 下面给出的示例仅简要概述了dll和exe如何相互交互(自我说明),但是还需要添加更多内容才能更改为生产代码。 完整的示例示例分为两部分 A.创建一个.dll库(MyDLL.dll) B.创建一个使用.dll库的应用程序(Application)。 .dll项目文件(MyDLL.dll): 1. dllHeader.h
2. dllSrc.cpp
B.加载并链接已创建的.dll文件的应用程序项目:
我使用一些宏来标记要导入或导出的代码
然后在头文件中声明该类:
然后在库中使用
我不知道您是否可能需要采取其他措施来处理 最近,我问自己完全相同的问题,并在博客文章中总结了我的发现。您可能会发现它很有用。
它涵盖了从DLL导出C ++类以及使用 如果愿意将vtable放在要导出的类中,则可以导出一个函数,该函数返回一个接口并在.dll中实现该类,然后将其放入.def文件中。您可能需要做一些声明技巧,但这并不难。 就像COM。 :) |
最新内容
相关内容
python3如何引入模块?
python3如何引入模块?,系统,位置,培训,标准,模块,方法,成员,路径,下面,别名,使用Python进行编程时,有些功能没必须自己实现,可以借助Python现有python怎么使用文件夹下的脚本?
python怎么使用文件夹下的脚本?,工作,培训,文件夹,脚本,文件,所在,方法,示例,路径,以上,python中使用文件夹下脚本的方法:将当前的工作目录(即python的三角函数在哪?
python的三角函数在哪?,标准,培训,函数,反函数,方法,下面,以上,更多,内容,python中的三角函数在python的标准库math中,math已经包含在你的标python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件python中函数怎么表示?
python中函数怎么表示?,名称,标准,培训,代码,函数,圆括号,字符串,表达式,选择性,自变量,python中函数定义规则:·函数代码块以def关键词开头,后python有函数重载吗?
python有函数重载吗?,情况,代码,设计,名字,培训,函数,参数,功能,类型,两个,python中没有函数重载。为了考虑为什么python不提供函数重载,首先python中怎么读取doxc文件?
python中怎么读取doxc文件?,培训,文档,文件,路径,命令,以上,更多,内容,python中可以使用python-docx库读取doxc文件,我们可以使用pipinstallpython如何删除某个目录文件夹?
python如何删除某个目录文件夹?,名字,代码,培训,文件夹,方法,文件,目录,语法,路径,格式,python删除某个目录文件夹及文件的方法:#!/usr/bin/en如何在python代码中指定保存的文件
如何在python代码中指定保存的文件格式,代码,培训,文件格式,格式,二进制文件,文件,后缀,以上,方法,更多,python指定保存文件格式的方法:1、保Python如何复制文件中的内容
Python如何复制文件中的内容,盘中,数据,培训,文件,内容,方法,文件夹,路径,源文件,文件名,python复制文件中内容的方法:1、使用shutil.copyfilepython函数里面形参和实参一样吗?
python函数里面形参和实参一样吗?,培训,函数,参数,里面,变量,实际,形式,全称,示例,后面,python函数里面形参和实参不一样。形参全称是形式参python中的open函数如何编码?
python中的open函数如何编码?,数据,系统,可取,培训,文件,参数,函数,时候,表示,模式,python中的open函数可以通过在打开文件时添加encoding参