上也有不少教程,但是很多都是只讲述了如何做,没有说为什么,导致很多迷惑,当然包括我。今天仔细尝试了,现在把结果说出来,大家共同学习。
首先我们来创建一个简单的dll,实现两个数相加。
1.首先是新建项目,这里我们选择创建一个library,c++库
2.接下来给你的项目,我的叫plus,点击下一步给类命名,我的类叫PlusFun
2.接下来就是一直下一步了。
然后这是我写好的代码:
头文件:
- #ifndef PLUSFUN_H
- #define PLUSFUN_H
- #include "plus_global.h"
- class PLUSSHARED_EXPORT PlusFun
- {
- public:
- PlusFun();
- int addFun(int a,int b);
- };
- #endif // PLUSFUN_H
源码文件:
- #include "plusfun.h"
- PlusFun::PlusFun()
- {
- }
- int PlusFun::addFun(int a, int b)
- {
- return a+b;
- }
这样就实现了简单的功能。
2.最后是构建,注意是点击下图的图标构建,而不是运行
现在,去你的目录下就可以看到dll文件了。还需要注意的就是一定要选择release模式,而不是debug哦
目录下生成了三个文件,我们提取plus.dll,这个文件才是我们需要的。
好了,现在我们来开始调用吧。
啪啪啪,熟练地建立一个应用程序项目,这个就不多说了,来看调用。
本文说的是隐式调用!
在开始之前先分析一下dll在什么时候需要,我们写程序的时候两个地方需要,一个是编译的时候,一个是exe文件运行的时候,那么因此,我们需要在两份dll文件(只用一份请看方法二)。
首先,我们把dll相关的头文件拷贝出来,放到一个目录下,目录是随意的,然后用includepath来加载,这个没什么好说的,拷贝的文件是:plus_global和plusfun.h(总之你把dll相关的头文件都拷贝出来就行了)
隐式调用方法一:
方法一意义不是很大,也比较难以表达,看不懂可以忽略。
我在D:\QTDev放了一个plus.dll,用来给头文件编译时候调用,然后在程序的输出目录下也放了一个,来给程序运行时候调用。
Pro文件我加了两行代码:
LIBS+=D:/QTDev/plus.dll
INCLUDEPATH+=D:/QTDev/head/
然后调用代码:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <plusfun.h>//头文件引入
- #include <QDebug>
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- //调用
- PlusFun plus;
- int c=plus.addFun(2,3);
- qDebug()<<c;
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
然后你就会发现输出结果是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文件。