前言
在Qt中生成DLL库是一项重要的技术,它允许开发者将一些功能模块封装成动态链接库,以便在不同项目中重复使用。生成DLL库的过程涉及配置.pro文件、编写源文件、定义导出符号、构建库文件等步骤。通过这种方式,可以降低代码耦合度,提高代码的可维护性和可扩展性。生成DLL库在Qt开发中扮演着关键的角色,为开发者提供了灵活、高效的代码组织和管理方式。了解并掌握生成DLL库的方法,可以帮助开发者更好地利用Qt框架,提高开发效率并加快项目开发进程。
1.创建DLL工程文件creatMyDll
- 【⭐步骤1】如图所示,创建C++ Library应用。
- 【⭐步骤2】qt module处选择core才能使用qt的内容,如果选择none则不能使用。例如,要使用qDebug类应该选择core。
- 【⭐步骤3】添加代码如下:
此处创建了private、protected、public下各一个函数,是想在此提醒一下这些关键字的作用。需要注意,如果一个工程中有多个源文件,其中需要导出给DLL调用者使用的文件需要在类定义的时候添加CREATMYDLL_EXPORT 关键字,在本例中是这样,因为这里有宏定义define CREATMYDLL_EXPORT Q_DECL_EXPORT,没有这个关键字的类调用者将无法使用。
creatmydll.h文件
#ifndef CREATMYDLL_H
#define CREATMYDLL_H
#include "creatMyDll_global.h"
#include <QDebug>
class CREATMYDLL_EXPORT CreatMyDll
{
public:
CreatMyDll();
QString showStatus();
private:
int testPrivate(int,int);
protected:
int testProtected(int, int);
};
#endif // CREATMYDLL_H
creatMyDll_global.h没有改动,保持默认。
creatmydll.cpp文件如下
#include "creatmydll.h"
CreatMyDll::CreatMyDll()
{
}
QString CreatMyDll::showStatus()
{
QString str = "Dll Creat Success!";
qDebug()<<str;
return str;
}
int CreatMyDll::testPrivate(int v1, int v2)
{
return v1+v2;
}
int CreatMyDll::testProtected(int a1, int a2)
{
return a1-a2;
}
- 【⭐步骤4】Run代码,在影子构建的debug下将看到生成了dll、.o、.a文件,这就是我们要的动态链接库文件。
2.调用DLL文件工程callMyDll
- 【⭐步骤1】copy .h文件 到callMyDll工程的根目录
- 【⭐步骤2】在qt工程中添加两个.h文件
选择刚才那两个.h文件 - 【⭐步骤3】在callMyDll工程下,复制生成.a文件到callMyDll工程根目录,并为他们创建一个文件夹叫“include”
- 【⭐步骤4】为callMyDll添加动态链接库
选择外部库,选择.a文件,其余选项按照截图设置
- 【⭐步骤5】复制dll文件到callMyDll工程的exe所在的文件夹,如还未生成,请先构建一遍,注意,此处应该使用release构建。
- 【⭐步骤6】添加代码如下:
callmydll.h文件
#ifndef CALLMYDLL_H
#define CALLMYDLL_H
#include <QWidget>
#include "creatmydll.h"
#include "creatMyDll_global.h"
QT_BEGIN_NAMESPACE
namespace Ui { class callMyDll; }
QT_END_NAMESPACE
class callMyDll : public QWidget
{
Q_OBJECT
public:
callMyDll(QWidget *parent = nullptr);
~callMyDll();
CreatMyDll myDef;
private:
Ui::callMyDll *ui;
void Init();
};
#endif // CALLMYDLL_H
callmydll.cpp
#include "callmydll.h"
#include "ui_callmydll.h"
callMyDll::callMyDll(QWidget *parent)
: QWidget(parent)
, ui(new Ui::callMyDll)
{
ui->setupUi(this);
Init();
}
callMyDll::~callMyDll()
{
delete ui;
}
void callMyDll::Init()
{
ui->status_Edit->setText(myDef.showStatus());
// int a = ui->valueOne->text().toInt();
// int b = ui->valueTwo->text().toInt();
// int c = myDef.testPrivate(a,b);//private下的函数,仅自己能调用
// int d = myDef.testProtected(a,b);//protected下的函数仅派生类可用
// ui->add->setText(QString::number(c));
// ui->minus->setText(QString::number(d));
}
main文件
#include "callmydll.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
callMyDll w;
w.show();
return a.exec();
}
- 【⭐步骤7】运行程序,结果如图。
3.传送门
END |
🎏文章原创,首发于CSDN论坛。
🎏欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🎏欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。