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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuancailinggan/article/details/51874015

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

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

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


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_globalplusfun.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文件。






展开阅读全文

没有更多推荐了,返回首页