Qt5.12实战之Qt中动态加载dll并调用其导出函数

文章详细介绍了如何创建一个动态库dll,并在Qt工程中进行使用。首先,创建库工程声明导出函数并配置为动态库,编译后生成.lib和.dll文件。然后,在Qt的控制台应用中,通过LoadLibrary函数加载dll,使用GetProcAddress获取导出函数的地址,最后通过函数指针调用导出函数并释放dll资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 准备导出库

创建库工程声明导出函数并实现

配置类型行动态库(dll)

 

编译成功后会生成.lib及.dll文件:

 

2.在Qt工程中使用dll

创建控制台应用

 定义函数指针: 

//函数指针定义
typedef int(*_EXPORT_FUNC)();

加载dll

//动态加载dll
inst = LoadLibrary(_T("TestExport.dll"));

 取函数所在进程地址

//通过进程地址加载导出函数
export_func = (_EXPORT_FUNC)GetProcAddress(inst, "export_func");//加载进程中的export_func函数

通过函数指针来调用函数

export_func();//根据地址调用导出函数

最后释放dll

//释放库
FreeLibrary(inst);

演示效果:

#include <QCoreApplication>
#include <QDebug>
#include <Windows.h>
#include <tchar.h>

//函数指针定义
typedef int(*_EXPORT_FUNC)();

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug()<<QStringLiteral("在Qt中使用导入库函数");
    HINSTANCE inst = NULL;//动态链接库的句柄
        _EXPORT_FUNC export_func;//函数指针
        //动态加载dll
        inst = LoadLibrary(_T("TestExport.dll"));
        if (!inst)
        {
            qDebug()<<QStringLiteral("加载TestExport.dll失败");
            return 0;
        }
        else {
            //通过进程地址加载导出函数
            export_func = (_EXPORT_FUNC)GetProcAddress(inst, "export_func");//加载进程中的export_func函数
            if (!export_func)
            {
                qDebug()<<QStringLiteral("获取函数export_func地址失败");
                return 0;
            }
            else {
                export_func();//根据地址调用导出函数
            }
        }
        //释放库
        FreeLibrary(inst);
    return a.exec();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

自由软件开发者

有你的鼓励,我会更加努力。

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

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

打赏作者

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

抵扣说明:

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

余额充值