qt程序加载动态链接库 dll的方式

本文介绍了在Qt5.11.3 64位环境下加载DLL的四种方式:动态加载(使用LoadLibraryA)、使用QLibrary、静态链接以及可能出现的问题和解决方法。重点讨论了当动态加载DLL时遇到句柄为空的情况,原因可能是DLL的位数与Qt程序不匹配,并给出了检查和解决的步骤。

qt加载dll有四种方式

本例中qt的版本为qt5.11.3 64位

一、动态加载

使用c++的函数,动态加载


bool bRet = false;
HINSTANCE hDll = nullptr;
    hDll = LoadLibraryA("dlfs.dll");
    if(hDll != nullptr)
    {
        bRet = true;
    }

二、使用qt自带的QLibrary进行加载

bool bRet = false;
    QLibrary liba("dlfs.dll");
    if(liba.load)
    {
        bRet = true;
    }

三、静态加载

在pro中添加 lib include 有两种方式

(一) 手动 

以配置opencv为例,在pro中直接填写如下内容即可

INCLUDEPATH += $$PWD/3rdparty/opencv/2.4.3/include/
INCLUDEPATH += $$PWD/3rdparty/opencv/2.4.3/include/opencv/
INCLUDEPATH += $$PWD/3rdparty/opencv/2.4.3/include/opencv2/

LIBS += -L$$PWD/3rdparty/opencv/2.4.3/x64/lib/ -lopencv_core243d

(二)自动

项目-----添加库---外部库-- 选择 库文件 和 库路径 点击确定后即 在pro中生成如下的内容。

也可以不按照此步骤,直接在pro中添加如下的代码即可

最后在pro中生成的为: 

INCLUDEPATH += $$PWD/3rdparty/opencv-4.2.0/include
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_core420
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_core420d

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_imgcodecs420
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_imgcodecs420d

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_imgproc420
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_imgproc420d

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_videoio420
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/./3rdparty/opencv-4.2.0/win10/x64/vc15/lib/ -lopencv_videoio420d

四、出现的问题

qt动态加载dll出现的问题

在使用LoadLibraryA加载动态链接库时,得到的句柄为空

如果发现动态加载dll时 hDll为空,而dll的路径是正确的,这时就要考虑dlff1.dll 的位数与qt程序是否一致了。


HINSTANCE hDll = LoadLibraryA("dlff1.dll");

qt程序为64位,通过dumbin.exe 发现dlff1.dll为32位的,为了使用方便,要求dlff1.dll 改为64位的dll,重新构建项目,输出x64位的dlff1.dll

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值