QT编写和调用dll动态库最新版(隐式调用)

时间:2024-05-23 19:42:51

上也有不少教程,但是很多都是只讲述了如何做,没有说为什么,导致很多迷惑,当然包括我。今天仔细尝试了,现在把结果说出来,大家共同学习。

首先我们来创建一个简单的dll,实现两个数相加。

1.首先是新建项目,这里我们选择创建一个libraryc++

QT编写和调用dll动态库最新版(隐式调用)

2.接下来给你的项目,我的叫plus,点击下一步给类命名,我的类叫PlusFun

QT编写和调用dll动态库最新版(隐式调用)

2.接下来就是一直下一步了。

然后这是我写好的代码:

头文件:

[cpp] view plain copy
  1. #ifndef PLUSFUN_H  
  2. #define PLUSFUN_H  
  3.   
  4. #include "plus_global.h"  
  5.   
  6. class PLUSSHARED_EXPORT PlusFun  
  7. {  
  8.   
  9. public:  
  10.     PlusFun();  
  11.     int  addFun(int a,int b);  
  12. };  
  13.   
  14. #endif // PLUSFUN_H  

源码文件:

[cpp] view plain copy
  1. #include "plusfun.h"  
  2.   
  3.   
  4. PlusFun::PlusFun()  
  5. {  
  6. }  
  7.   
  8. int PlusFun::addFun(int a, int b)  
  9. {  
  10.     return a+b;  
  11. }  

这样就实现了简单的功能。

2.最后是构建,注意是点击下图的图标构建,而不是运行

QT编写和调用dll动态库最新版(隐式调用)

现在,去你的目录下就可以看到dll文件了。还需要注意的就是一定要选择release模式,而不是debug

目录下生成了三个文件,我们提取plus.dll,这个文件才是我们需要的。

好了,现在我们来开始调用吧。

啪啪啪,熟练地建立一个应用程序项目,这个就不多说了,来看调用。

本文说的是隐式调用!

在开始之前先分析一下dll在什么时候需要,我们写程序的时候两个地方需要,一个是编译的时候,一个是exe文件运行的时候,那么因此,我们需要在两份dll文件(只用一份请看方法二)。

首先,我们把dll相关的头文件拷贝出来,放到一个目录下,目录是随意的,然后用includepath来加载,这个没什么好说的,拷贝的文件是:plus_globalplusfun.h(总之你把dll相关的头文件都拷贝出来就行了)

 

 

隐式调用方法一:

方法一意义不是很大,也比较难以表达,看不懂可以忽略。

我在D:\QTDev放了一个plus.dll,用来给头文件编译时候调用,然后在程序的输出目录下也放了一个,来给程序运行时候调用。

Pro文件我加了两行代码:

LIBS+=D:/QTDev/plus.dll

INCLUDEPATH+=D:/QTDev/head/

然后调用代码:

[cpp] view plain copy
  1. #include "mainwindow.h"  
  2. #include "ui_mainwindow.h"  
  3. #include <plusfun.h>//头文件引入  
  4. #include <QDebug>  
  5.   
  6. MainWindow::MainWindow(QWidget *parent) :  
  7.     QMainWindow(parent),  
  8.     ui(new Ui::MainWindow)  
  9. {  
  10.     ui->setupUi(this);  
  11. //调用  
  12.     PlusFun plus;  
  13.     int c=plus.addFun(2,3);  
  14.     qDebug()<<c;  
  15.   
  16. }  
  17.   
  18. MainWindow::~MainWindow()  
  19. {  
  20.     delete ui;  
  21. }  

然后你就会发现输出结果是5.

调用方法二:

方法一太麻烦了,我们完全可以简单一点。

首先,复制你的dll文件到输出目录下面:

Pro文件增加如下:

LIBS+=D:/QTDev/build-callplus-Desktop_Qt_5_6_0_MinGW_32bit-Debug/debug/plus.dll

INCLUDEPATH+=D:/QTDev/head/

注意,这里的生成目录我故意没有修改,就是为了显眼。

然后调用代码还是和上面的一样,同样可以调用!

上面说的还是有些复杂,看下面的概述把。

总结,隐式调用就是:

一:在pro文件用LIBS给它指定一下dll文件在哪里;

二:在你的程序exe目录的位置,放一个dll文件。