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