QT上位机开发(动态库dll的开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        有的时候,我们不想把所有的代码都放在一个exe里面,这个时候我们就需要引入dll动态库的概念。在windows平台上面,这个动态库就是dll文件,在linux平台上面,这个动态库就是so文件。不管是哪一种形式,它们的运行方式都是差不多的,那就是执行文件调用到具体函数的时候,才会跳到动态库执行。dll还有一个好处,那就是可以帮助我们提炼函数、类接口,实现程序的动态加载。这样软件除了问题之后,不需要重新编所有的代码,只需要更新指定的dll文件就可以。

        今天我们在编写qt软件的时候,正好也可以学习下在cpp下,函数和类是怎么做到dll里面的,且能被外面的代码调用。

1、创建一个qt widget项目

        和之前一样,创建一个qt widget项目,这个项目只是为了演示。不需要用widget在里面添加任何的内容。

2、在当前的solution里面添加一个dll项目

        直接选择solution、添加、新建项目,选择动态链接库,确认就好。这样一个dll项目就被添加到这个项目里面来了。

3、添加导出函数代码

        为了测试,我们添加一个测试函数。函数的话,按照正常的方法编写就可以了。不过有两个地方需要注意下,第一,就是需要添加一个extern "C";第二,就是添加_declspec(dllexport)。这样后续的exe文件,就可以看到这个被export出去的函数了。

// about function export
extern "C" _declspec(dllexport) int iterate(int data)
{
	if(data == 1)
		return 1;

	return iterate(data - 1) + data;
}

4、添加导出类代码

        除了函数,还有一些类也是要被导出来的,其实也是一样。不过和函数相比较,类如果需要导出的话,只需要添加一个_declspec(dllexport)就好了。

// about class export
class _declspec(dllexport) parent
{
public:
	parent() {}
	~parent() {}
	parent(parent&) {};
	void display() { std::cout << "display function was invoked here!" << std::endl; }
};

5、在exe可执行文件中添加函数和类的引用

        前面我们在dll当中已经实现了需要导出的函数和类。那么在exe当中如果需要使用这些类和函数的话,也需要添加相关的代码,比如像这样,

// about function import
extern "C" _declspec(dllimport) int iterate(int);

// about class import
class _declspec(dllimport) parent
{
public:
	parent();
	~parent();
	parent(parent&);
	void display();
};

6、先编译dll,然后在exe中引入dll

        代码准备好了之后,就可以先编译dll。因为编译好了之后,就可以把dll库导入到exe项目当中去了。

7、exe项目中添加代码,开始测试

        所有条件都准备好了,就可以添加代码测试了,

	// test code here
	int aa = iterate(10);
	parent pp;
	pp.display();

        测试的时候,可以添加断点,比如iterate是不是可以单步调试?单步调试的时候会不会跳到dll工程去?parent实例化是否成功?实例化的时候,是否可以跳到构造函数去?display类函数是不是可以执行到,是不是可以跳到dll里面去等等?这些问题都可以通过单步调试来进行处理和验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/294214.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口测试测什么?一个简单问题把我难住了!

那么设计测试用例时我们主要考虑如下几个方面&#xff1a; 01、功能测试 接口的功能是否正确实现了 接口是否按照设计文档中来实现 &#xff08;比如username参数写为了user&#xff0c;那么这就不符合&#xff0c;因为接口文档在整个开发中都需要使用&#xff0c;所以接口实…

Spss Amos 28安装包下载及安装教程

Amos 28下载链接&#xff1a;https://docs.qq.com/doc/DUnhwUXFnTGtyRnJ1 1.鼠标右键解压到“Amos 28” 2.选中Setup&#xff0c;鼠标右击选择“以管理员身份运行” 、3.点击“Next” 4.选择I accept the terms in the license agreement&#xff0c;点击“Next” 5.选择软件安…

Centos7.9或Deebian12安装K3s和k9s详细流程

1、在线安装k3s 安装的版本为&#xff1a;v1.23.15k3s1 curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRRORcn INSTALL_K3S_VERSION"v1.23.15k3s1" sh - 2、安装完成&#xff0c;测试 kubectl get nodes正常输出即没…

【教学类-综合练习-02】20231208 大3班 数字加减法练习(数字火车、X—Y加法减法、X乘法、X—Y数字分合)

教学情况 时间&#xff1a;20231208 班级&#xff1a;大3班 人数&#xff1a;21 目的&#xff1a;幼儿根据自己的能力水平&#xff0c;选择适合的数学题&#xff08;多款样式&#xff09; 在昨天大4班制作的基础上&#xff0c;特地打印一些小纸片数学题&#xff08;节省纸…

WPF DatePicker与Calendar的使用和样式修改

什么是DatePicker&#xff0c;Calendar Calendar&#xff1a;日历&#xff08;显示年月日视图控件&#xff09;DatePicker&#xff1a;日期选择器&#xff08;是一个更小的控件&#xff0c;点击控件时才会弹出一个日历&#xff09; Calendar使用 常用属性 DisplayMode&#…

【漏洞复现】通天星CMSV6车载监控平台FTP匿名访问

Nx01 产品简介 深圳市通天星科技有限公司&#xff0c;是一家以从事计算机、通信和其他电子设备制造业为主的企业。通天星车载视频监控平台软件拥有多种语言版本。应用于公交车车载视频监控、校车车载视频监控、大巴车车载视频监控、物流车载监控、油品运输车载监控、警车车载视…

基于Java SSM框架实现宠物管理系统项目【项目源码+论文说明】

基于java的SSM框架实现宠物管理系统演示 摘要 随着我国经济的快速发展&#xff0c;人民生活水平的不断提高&#xff0c;宠物逐渐成为许多宠物爱好者的一种生活方式。 宠物的品种也越来越多样化&#xff0c;宠物不仅能给生活带来乐趣还可以成为空巢老人&#xff0c;独生子女很…

windows安装kafka以及kafka管理工具推荐

windows安装 1.下载地址 下载地址 下载最新版本的.tgz文件解压 2.修改配置 修改config目录下的zookeeper.properties中的dataDir属性 server.properties文件中的log.dir属性 3.启动zookeeper 进入到bin\windows\下的用cmd输入zookeeper-server-start.bat ..\..\config\zo…

ShardingSphere-JDBC初探

引言 为什么使用分库分表&#xff1f; 数据量太大单表放不下&#xff0c;并且公司不希望切换产品&#xff0c;可选的方案不多&#xff0c;ShardingSphere就是不错的选择。 切换产品指的是换成es、clickhouse、hbase这种支持大数据&#xff0c;试想一下切换产品对整个项目的改…

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来&#xff0c;它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具&#xff0c;似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

vivado license申请

AMD: Product Licensing

一分钟全方位认识飞速创软

公司简介 飞速软创专注于面向研发团队的一体化研发平台产品&#xff0c;倾力打造集高效与智能于一体的一体化研发平台产品。其根基深植于深圳这座科技之城&#xff0c;并已将业务版图拓展至北京、上海、珠海及香港等地&#xff0c;通过设立分公司和办事处&#xff0c;全方位覆盖…

音乐制作软件Studio One mac有哪些特点

Studio One mac是一款专业的音乐制作软件&#xff0c;该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件特点 1. 直观易用的界面&…

胎牛血清,预计2028年达到27.5亿美元以上

胎牛血清是从胎牛的脐带或心脏中提取出的一种高营养的医疗用品。本文将从全球市场和中国市场两方面进行分析其发展趋势。 全球市场分析&#xff1a;胎牛血清在药品和生物科技行业中有着广泛的应用&#xff0c;如细胞培养、疫苗制备、诊断试剂盒和治疗药物等。随着生物技术的不断…

多台西门子PLC对接Oracle数据库,实现PLC与数据库双向数据通讯

智能网关IGT-DSER方便实现多台PLC与数据库之间的数据通讯&#xff0c;既可以读取PLC的数据上报到数据库&#xff0c;也可以从数据库查询数据后写入到PLC的寄存器。 网关安装在设备侧&#xff0c;与设备同时起停&#xff0c;不担心数据丢失&#xff1b;在断网、服务器维护上报数…

淘宝以图搜商品API调用详细步骤(apiKeysecret)

以图片来搜索商品是电商平台常见的一个功能&#xff0c;一般用于搜索同款、找爆品、淘宝拍立淘等功能。 通过item_search_img可以实现通过图片来搜索同款商品列表&#xff0c;响应参数包括宝贝标题、列表类型、宝贝图片、优惠价、价格、销量、宝贝ID、商品风格标识ID、掌柜昵称…

vue实现项目部署成功之后提示用户刷新页面

vue实现项目部署成功之后提示用户刷新页面 1. 项目根目录新建 version.js require("fs").writeFileSync("./public/version.txt", new Date().getTime().toString()) 2. 改写package.json中打包命令 "scripts": {"dev": "vue-cl…

CF1909_C. Heavy Intervals题解

CF1909_C. Heavy Intervals题解 题目传送门&#xff08;Problem - C - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1909/problem/C&#xff09;。 题目翻译如下&#xff1a;&#xff08;图片来源&a…

STM32 CubeMX产生的程序架构

使用STM32CubeMX产生启动相关代码&#xff0c;配置各种外设。在后续程序开发过程中&#xff0c;有可能使用STM32CubeMX逐步产生使用的代码&#xff0c;为了将其产生的代码和我们程序隔离&#xff0c;一种可行的程序架构如下&#xff1a; 在此架构中&#xff0c;STM32CubeMX产生…

还在用if-else? 用策略模式干掉它

策略模式&#xff08;Strategy Pattern&#xff09; 策略模式是一种行为设计模式&#xff0c;它将一组行为转换为对象&#xff0c; 并使其在原始上下文对象内部能够相互替换。大白话就是比如我写一个登录业务&#xff0c;目前需要满足能通过系统内、微信等平台进行登录&#x…