QT显式加载dll的方法

Qt DLL 插件中加载 DLL 的正确方法:以 HTTPS 支持为例 在开发 Qt 应用程序时,特别是涉及网络和 HTTPS 请求的功能时,可能需要加载 OpenSSL 的特定动态链接库(DLL),例如和。在开发独立可执行文件时,将这些 DLL 放在可执行文件的同一目录下通常就足够了。然而,当使用 Qt DLL 插件时,确保这些库正确加载需要额外的步骤。 阅读详情

1、vc生成dll的源码如下(以下源码使用vs2015编译通过):

// dll头文件
#ifdef SUM_EXPORTS
#define SUM_API __declspec(dllexport)
#else
#define SUM_API __declspec(dllimport)
#endif

extern "C" SUM_API int fnSum(int a, int b);

//dll cpp文件

// Sum.cpp : 定义 DLL 应用程序的导出函数。
//

//#include "stdafx.h"
#include "Sum.h"

// 这是导出函数的一个示例。
SUM_API int fnSum(int a, int b)
{
    return (a+b);
}

 2、QT加载Sum.dll

    两种显式加载方式:

    2.1、先加载dll,再解析出接口函数

#include <QCoreApplication>
#include <QLibrary>
#include <QDebug>
 
typedef int (*FUNC)(int a, int b);
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    QLibrary lib("Sum.dll");
    if(!lib.load())
    {
        qDebug()<<"Load dll failed!";
        return -1;
    }

    FUNC func = (FUNC)lib.resolve("fnSum");
    if (!func)
    {
        qDebug()<<"Resolve function failed!";
        return -1;
    }
 
    int ret = func(1, 2);
    qDebug()<<"ret: "<<ret;
 
    return a.exec();
}

  2.2、直接加载库并从中解析出接口函数:

#include <QCoreApplication>
#include <QLibrary>
#include <QDebug>
 
typedef int (*FUNC)(int a, int b);
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    FUNC myFunc = (FUNC)QLibrary::resolve("Sum.dll", "fnSum");
    if (!myFunc)
    {
        qDebug()<<"Load dll failed!";
        return -1;
    }

    int ret = myFunc(1, 2);
    qDebug()<<"ret: "<<ret;
 
    return a.exec();
}

 

QT 通过动态加载DLL实现插件化 简介 本文只针对Windows应用程序,因为需要加载插件,如果对移植有要求可以不看本篇文章了。 Windows.h 文件中提供了加载DLL文件的方法,我们可以像JAVA一样规定一个接口,该接口为一个类,类内部全是虚方法,而该类的实现类及具体方法DLL文件实现。这样,我们就可以动态更换或添加新的功能了。 DLL项目的写法 新建项目后,把 xxx_global.h文件中的内容拷贝到 另一个.h文件开头 拷贝后把 xxx_global.h 文件删除掉 .h文件的写法示例(dlllib.h) 阅读详情

相关推荐

QT调VC的DLL实验总结

Qt5中动态链接库的创建和使用

Sagittarius_Warrior的博客 1637

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

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; QLi

u012719076的博客 2万+

qt启动页面以及资源加载

qt启动页面,查到的好多都不能用,而且有问题。

qq_45179361的博客 1417

Qt新建动态链接库及加载

新建dll文件 第一步,新建项目文件,选择 Library ---- C++ library 第二步,选择Shared Library,这里Qt Creator默认的是生成一个类,自定义名字为AddFun 第三步,可以看到,Qt生成了两个头文件和一个cpp文件,这里函数的声明主要放在addfun.h中,函数的定义在addfun.cpp文件中。 在addfun.h中声明函数(这里将类注释,是因为封装的dll文件目不需要类,只需要函数) #ifndef ADDFUN_H #define ADDFUN_

手写不期而遇的博客 3001

Qt Dll总结(二)——创建及使用QtDll(转载)

先讲一下对QT动态链接库的调用方法,主要包括: 1、链接DLL,调用DLL的全局函数,采用QtQLibrary方法 2、显示链接DLL,调用DLL中类对象、成员函数。(通过对象即可实现类成员函数的调用) ①用虚函数表的方法,这也是COM使用的方法,利用QtQLibrary技术调用; ②用GetProcAddress直接调用。 ③用Qt的QPluginLoader类直接调用生...

weixin_33725272的博客 288

Qt/调用DLL

下面是我对Qt/调用DLL一点理解,我参考的相关网址会在下面罗列出来: ①显示调用 这里我觉得http://www.cnblogs.com/newstart/archive/2013/01/23/2873611.html的例子挺好的,使用Qt创建了一个加法函数和查询页面并封装成DLL以供Qt调用。 在头文件里申明DLL共享接口: #include "MyTestDll_

乱七八糟の中转站 4679

Qt学习篇(二):Qt加载动态库

      之写到Qt的信号槽机制,这篇来记录下Qt如何加载外部动态库。      Qt加载动态库分为加载与隐加载,现在先来了解下链接库:(1)动态链接库,通常有.h .lib .dll三个文件,功能实现在dll中(有时.lib会以***.dll.a的形显示,两者意义相同);(2)静态链接库,通常有.h .lib二个文件,功能实现在lib中。             加载DLL...

Eternally_Time的博客 1万+

在VS和Qt中使用动态链接库.dll---以链接的方

在VS和Qt中使用动态链接库.dll(链接) 编译输出,会生成和,将拷贝到Qt项目目录使用Qt自带的类QLibrary加载并使用 相关的参考文献:

DongZhaoCheng 1677

QT-动态链接库动态加载和静态加载方法详解

1、先说明本文要实现的功能: (1)生成一个动态链接库; (2)隐加载动态链接库,需要的文件:*.h(非必须文件,如果不使用*.h文件,那么调用程序所需要的函数或是类就需要自己声明,所以说建议直接使用动态链接库的*.h文件。如果使用别人的动态链接库没有*.h文件那只有自己在调用程序中声明了);*.dll文件(必须有);*.lib文件(必须有)。 (3)使用QLibrary()动态加载,*....

小米的修行之路 9170

Qt专栏】Qt创建和调用动态链接库

Qt创建和调用动态链接库一步到位,简直不要太简单了

weixin_43729127的博客 8401

QT开发中如何加载第三方dll文件

Qt加载DLL的三种主要方法及解决方案 摘要:Qt加载DLL文件有三种方:1)隐加载(静态链接),通过.pro文件配置库路径和头文件;2)加载(动态链接),推荐使用QLibrary实现运行时加载;3)Windows API直接调用。常见问题包括DLL未找到(错误126)、函数解析失败(错误127)和32/64位不兼容(错误193)。建议优先使用QLibrary,注意编译器兼容性(MinGW/MSVC)和正确使用extern "C"导出函数。关键工具包括Dependency

学无止尽,谨言慎行! 2794

qt使用动态库(DLL)

转自:http://blog.csdn.net/zhuce0001/article/details/20651025 本文主要讲解在QT开发环境中如何使用VC生成的DLLQT自身生成的DLL。至于其它情况本文不作讨论。 连接库分为2种 (1)动态连接库,通常有.h .lib .dll三个文件,功能实现在dll中 (2)静态连接库,通常有.h .lib二个文件,功能实现在l

duhuzhen的博客 805

DLLQt中的创建与使用

 学习之先了解一下链接库的基本知识链接库预备知识 库包含静态链接库 动态连接库 (动态装载:静态绑定与动态绑定) 目以lib后缀的库有两种, 一种为静态链接库(Static Libary,以下简称“静态库”), 包含了实际的代码和符号 一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。 包括地址符号表。 动态链接库的调用

-CQ-的专栏 994

Qt如何调用VS编写的动态链接库(dll文件)

在最近的开发中需要做了demo,来验证公司的老项目能否在Qt上做重新开发;于是碰到的第一个问题那就是dll文件如何加载了;网上查阅了很多资料,记录一下已成功加载dll文件的方法,以防遗忘。 下面是我在VS编译器上写的一个简单的dll文件,关于dll文件如何编写,我就不再赘述了。 .h文件 #ifndef _MYDLL_H #define _MYDLL_H #ifdef...

weixin_30763455的博客 2631

qtdll在linux系统运行,qt下调用dll方法(转)

[转] 问题引出:有个微机测控的课程实验,要写个监测温度和湿度的程序。要求通过调用传感设备厂商提供的.DLL库,.LIB库和.h头文件,用MFC写个用户界面。问道:我想用其他的GUI来开发可不可以?老师:不行,因为提供的库是只能用在MFC 里面的。。。我其实是想问,是不是要求必须用MFC,结果老师的回答真让人觉得。。。还有这回事?这里的肯定也可以用在别的GUI开发程序里面,这些东西本质上都是C++...

weixin_28880179的博客 972

qt5 显示调用CAN卡第三方库并调用函数

Qt调用第三方库一般有两种方显示和隐。这里主要介绍显示调用CAN卡第三方库,还介绍一般隐调用方法

intelligence123的博客 1万+
上一篇: 理解 Thread.Sleep
下一篇: 解决QT加载dll失败问题
cabinriver
博客等级 码龄18年 45粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cabinriver

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值