QT Creator中编写dll

环境:WIN10, QT5.14.2, QT Creator5.14.1

制作DLL

打开Qt Creator,新建工程:

 选择创建C++ Library

给项目命名为create_dll,项目创建在自己定义的目录下

之后一直点击Next ,直到选择MinGW编译

再点击Next,然后点击Finish完成创建,生成的目录结构如下:

 

 首先,在create_dll.pro文件中指定生成的文件名:

TARGET = test

 然后修改create_dll.h文件:

#ifndef CREATE_DLL_H
#define CREATE_DLL_H

#include "create_dll_global.h"

//此类为dll文件的主类
class CREATE_DLL_EXPORT Create_dll
{
public:
    Create_dll();
    //函数在这里作为虚函数定义,析构函数也尽量声明为虚析构函数
    virtual int add(int a, int b);
    virtual ~Create_dll();
};

//这个函数用来创建一个类的实例,返回类型必须是指针
extern "C" CREATE_DLL_EXPORT Create_dll* getDllObj();
//extern "C"指示编译器按照C语言的编译方式编译,防止链接错误

#endif // CREATE_DLL_H

 接下来在create_dll.cpp中定义函数:

#include "create_dll.h"

//构造函数和析构函数
Create_dll::Create_dll() {}
Create_dll::~Create_dll() {}

//创建实例的函数,在类外定义函数,不需要重复添加关键字"virtual"和导入/导出类型CREATE_DLL_EXPORT
Create_dll *getDllObj()
{
    return new Create_dll();
}

//定义要打包的函数
int Create_dll::add(int a, int b) {
    return a + b;
}

 在Qt Creator左下角选择编译方式:

 点击编译按钮,会在同级目录下生成一个build目录

此目录中有2个文件夹:release和debug,我们的dll文件在release文件夹里。

 使用DLL

再创建一个Qt项目,这里选择的是窗口应用程序:

一直点击Next,最后点击Finish完成创建,生成的目录结构如下:

将dll的头文件复制并添加进项目中:

HEADERS += \
    create_dll.h \
    create_dll_global.h \

点击mainwindow.ui打开设计界面,在界面上放置一个按钮,将其名称改为load_dll,并为其添加一个clicked信号的槽函数:

 

void MainWindow::on_pushButton_clicked()
{
    QString str;
    int sum;

    QLibrary *lib = new QLibrary("test.dll");
    if (lib->load()) {
        Create_dll *dll = ((Create_dll* (*)())(lib->resolve("getDllObj")))();
        sum = dll->add(1, 2);
        str = QString("sum = %1").arg(sum);
        QMessageBox::information(this, "result", str);
        lib->unload();
        delete lib;
        delete dll;
    }
}

构建项目,

 

 将test.dll复制到构建目录的debug目录下:

运行项目

 

 

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值