博客
关于我
QT的C++程序加载动态链接库DLL(Linux下是so)的方式
阅读量:795 次
发布时间:2023-03-03

本文共 1169 字,大约阅读时间需要 3 分钟。

QT加载动态链接库有两种主要方式:动态加载和静态加载。以下将详细介绍这两种方法。

动态加载

动态加载是通过调用C++函数来实现的。首先需要定义一个函数指针类型:

typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD, UINT);

这里,LPFNDLLFUNC1 是我们想要调用的函数指针类型。需要注意的是,函数的参数类型和顺序必须与DLL文件中实际定义的函数一致,否则会导致调用失败。

在代码中实现动态加载的步骤如下:

bool bRet = false;
HINSTANCE hDll;
LPFNDLLFUNC1 lpfnDllFunc1;
hDll = LoadLibraryA("dlfs.dll");
if (hDll != nullptr) {
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDll, "DLLFunc1");
if (!lpfnDllFunc1) {
FreeLibrary(hDll);
return SOME_ERROR_CODE;
} else {
// 调用函数
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
bRet = true;
}

使用QT自带的QLibrary

QT提供了QLibrary类来简化动态链接库的加载过程。定义函数指针类型:

typedef int (*pcom_open)(int, int, int);

使用QLibrary实现动态加载的代码示例如下:

bool bRet = false;
int ret;
int port = 1; // 端口号
int baud = 0; // 波特率
int rtsdtr = 0; // 串行口485方向控制设置
QLibrary liba("dlfs.dll");
if (liba.load) {
// "ltm_com_open"为DLL中实际存在的函数名
pcom_open open = (pcom_open)liba.resolve("ltm_com_open");
if (open) {
ret = open(port, baud, rtsdtr);
}
bRet = true;
}

静态加载

静态加载的实现方式是通过在项目的.pro文件中手动添加库文件。可以通过以下命令实现:

LIBS += -L$$PWD/../../libs/ -lWpsToolNew

注意:-L-l 参数需要同时使用,以确保正确加载库文件。

转载地址:http://vcxfk.baihongyu.com/

你可能感兴趣的文章
POJ-Fence Repair 哈夫曼树
查看>>
poj1061 - 同余方程,二元一次不定方程
查看>>
Qt笔记——SQLite再探
查看>>
poj1068Parencodings
查看>>
poj1182(带权并查集)
查看>>
POJ1182(带权并查集)
查看>>
Qt笔记——Qt初探、PyQt5和Qt5
查看>>
poj1190生日蛋糕
查看>>
POJ1218 HDU1337 ZOJ1350 UVALive2557 THE DRUNK JAILER
查看>>
poj1222 EXTENDED LIGHTS OUT(gauss)
查看>>
POJ1240 m叉树
查看>>
Poj1328--Radar Installation(区间选点)
查看>>
POJ1384Piggy-Bank(DP)
查看>>
POJ1417 True Liars —— 并查集 + DP
查看>>
Poj1459 Power Network 预流推进
查看>>
POJ1502(MPI Maelstrom)
查看>>
poj1568 Find the Winning Move[极大极小搜索+alpha-beta剪枝]
查看>>
poj1730 - Perfect Pth Powers(完全平方数)(水题)
查看>>
poj1753——Flip Game
查看>>
poj1936 假期计划第一水
查看>>