Qt开发技巧(2)Qt制作动态链接库DLL文件

在这里插入图片描述

前言

在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论坛。
🎏欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🎏欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA小油条

原创不易,请多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值