0
点赞
收藏
分享

微信扫一扫

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


1. 准备导出库

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

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

配置类型行动态库(dll)

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

 

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

Qt5.12实战之Qt中动态加载dll并调用其导出函数_开发语言_03

 

2.在Qt工程中使用dll

创建控制台应用

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

 定义函数指针: 

//函数指针定义
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);

演示效果:

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

#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();
}

 

举报

相关推荐

0 条评论