10

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

 1 year ago
source link: https://blog.csdn.net/feixiaoxing/article/details/135408434
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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项目就被添加到这个项目里面来了。

a090750c808a4eb3902c00e86b2f66d6.png

3、添加导出函数代码

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

4、添加导出类代码

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

5、添加导出全局变量

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

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

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

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

0010e573b9b0401db913ba21b915fb11.png

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

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

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


Recommend

  • 3
    • www.cnblogs.com 2 years ago
    • Cache

    C++调用C#的动态库dll

      以往我们经常是需要使用C#来调用C++的dll,这通过PInvoke就能实现。现在在实际的项目过程中,有时会遇到在C++的项目中调用某个C#的dll来完成特定的某个功能,我们都知道,Native C++是没办法直接调用.NET平台的dll的。那有没有办法来做到这一点了?答案是肯定的...

  • 4

    上位机开发(动态数据展示)

  • 4
    • blog.csdn.net 2 years ago
    • Cache

    c#开发和学习(c#调用dll)

    c#开发和学习(c#调用dll)

  • 5
    • studygolang.com 2 years ago
    • Cache

    C#调用C++ 动态链接库dll

    C#调用C++ 动态链接库dll xiaotu123 · 大约4小时之前 · 42 次点击 ·...

  • 3
    • www.cnblogs.com 2 years ago
    • Cache

    P/Invoke之C#调用动态链接库DLL

    本编所涉及到的工具以及框架: 1、Visual Studio 2022 2、.net 6.0 P/Invok是什么? P/Invoke全称为Platform Invoke(平台调用),其实际上就是一种函数调用机制,通过P/Invoke就可以实现调用非托管Dll中的函数...

  • 11

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         很多时候,我们并不希望所有的程序都放到一个exe里面。因为这样相当于把所有的风险都放在了一个文件里里面,既不利于程序的升级,也不利于程序的模块化切割和复...

  • 13

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         写图形界面软件的时候,我们经常会遇到一种情况。那就是图形界面上面,显示的控件可能是不定的。有可能多,也有可能少,具体显示多少内容需要根据配置文件而来。...

  • 6

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         数据采集和监控是上位机开发一项很基础的功能。采集数据的多少,采集的频率,这个取决于具体的项目类型。采集数据之后的处理,一般由于项目的不同,也是不一样的...

  • 8

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         开发界面的时候,大多数情况下,我们都是推荐优先使用designer来进行界面开发。但凡事总有例外,如果控件本身数量未定的时候,比如绘制某一个芯片的引脚,这个时...

  • 6

    【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         上位机开发中,有一种类型的应用软件很特殊,它几乎没有什么交互操作,主要的工作就是检测和显示。如果说在此基础上有什么扩展的话,可能就是安全监控和报警。所...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK