Qt动态调用(外部调用)SDK库(dll动态库)

news/2024/10/30 23:16:49/

Qt动态调用SDK库(dll动态库)

​​​​​​​

 之前的文章,介绍了Qt调用sdk库的方式,大家可以点击查看(Q调用SDK库(dll动态库))之前的文章,里面介绍的调用方式就是静态的调用方式。如下图所示,需要提供.h文件,dll文件和lib文件。

 本篇文章主要实现通过一个dll文件,外部动态调用的方式来调用我们的sdk库。

示例:我们以vs2015创建一个dll库,然后通过Qt MinGW编译器来动态调用这个库

一、VS创建dll库

1、创建一个dll库的工程,并命名为AddExample。

 2、添加一个addExample.h和.cpp文件

 3、添加如下头文件和cpp代码

 4、注意

我们要注意:一定要添加如下代码,表示要导出函数。

#ifndef DLLEXPORT_EXPORTS
#define DLLEXPORT_API __declspec(dllexport)
#else
#define DLLEXPORT_API __declspec(dllimport)
#endif

 同时,EXTERN_C表示防止生成的dll代码在其他编译器使用时可能会被改变。

EXTERN_C DLLEXPORT_API int add(int a, int b);

完整的代码如下:

头文件:
#pragma once
#ifndef DLLEXPORT_EXPORTS
#define DLLEXPORT_API __declspec(dllexport)
#else
#define DLLEXPORT_API __declspec(dllimport)
#endif#include<iostream>
#include<fstream>
#include<Windows.h>//函数定义导出接口函数(加、减、乘、除)
EXTERN_C DLLEXPORT_API int add(int a, int b);EXTERN_C DLLEXPORT_API int subtract(int a, int b);EXTERN_C DLLEXPORT_API int multiply(int a, int b);EXTERN_C DLLEXPORT_API int divide(int a, int b);cpp文件
#include "addExample.h"int add(int a, int b)
{return (a + b);
}int subtract(int a, int b)
{return (a - b);
}int multiply(int a, int b)
{return (a * b);
}int divide(int a, int b)
{return (a / b);
}

5、生成

我们可以看到生成的库。

 二、使用Qt调用创建的库

1、创建一个Qt的项目,我的编译器如下图所示:

 2、工程如下:

 3、代码如下:

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QLibrary>
#include <QDebug>namespace Ui {
class MainWindow;
}typedef int (*_myadd)(int,int);
typedef int (*_mysub)(int,int);class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private://调用dll的resolve功能函数template<typename Func>bool resolveFunction(Func& f, const char* name) {f = (Func)m_pLib->resolve(name);    //把名为nanme的功能函数指针传递给对象功能函数fif (nullptr == f) {qDebug () << "resolve function " << name << "failed";return false;}qDebug() << "resolve function " << name << "success";return true;}private:Ui::MainWindow *ui;QString m_strLibPath;   //动态库路径QLibrary*   m_pLib;   //指向dll的指针,记得初始化置NULL_myadd m_myadd; // dll中myadd类型的对象_mysub m_mysub;
};#endif // MAINWINDOW_H

cpp文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_strLibPath = "F:/My_VsProject/VS2015_project/AddExample/Release/AddExample.dll";if (!QLibrary::isLibrary(m_strLibPath)){qDebug() << m_strLibPath << "!QLibrary::isLibrary";}m_pLib = new QLibrary(m_strLibPath);bool libload =false;if(!m_pLib->load())   //dll加载{qDebug()<<"load failed";}else{qDebug()<<"load succ";libload =true;}if(!resolveFunction(m_myadd, "add")){qDebug()<<"failed";}else{int ret = m_myadd(5,8);qDebug()<<"ret = "<<ret;}
}MainWindow::~MainWindow()
{delete ui;
}

4、运行查看

运行结果如下:

本系列的文章链接如下:

Qt创建SDK库(dll动态库)并调用SDK库(dll动态库)

SDK(动态链接库dll)的封装技巧

VS2022中创建C++SDK库(dll动态库)并调用SDK库(dll动态库)

C#调用C++封装的SDK库(dll动态库)——上

C#调用C++封装的SDK库(dll动态库)——下


http://www.ppmy.cn/news/332216.html

相关文章

Android约束布局

一、嵌套布局效率可能很低。 在 Android 开发中,我们常常需要使用嵌套布局来实现某些较复杂的界面效果。但是嵌套层级太深会带来一些问题,主要包括: 视图层级过深,导致内存占用过高和性能下降。Android 需要为每个 View 对象分配内存,嵌套层级过深会创建很多 View 对象,占用较…

京瓷1800打印机扫描步骤_京瓷复印机扫描设置方法京瓷复印机扫描到电脑设置...

京瓷KM-2050/2550/3035/4035/5035扫描卡设置说明 扫描至PC设置步骤 (老款京瓷复印机扫描,新款下方有更新) 1.(1)首先在所在设备上安装京瓷扫描组件。 (2)在初始设定/扫描初始设定/基本系统设定/中设定好IP地址。注意DHCP要选择关。 2.设定发件人及收件人 ]3.ip端口扫描 [有针…

麒麟V10系统U盘引导盘制作手册

麒麟V10-SP1服务器系统U盘引导盘制作手册 一、前期准备 1、安装Fedora刻录软件 下载地址&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;8888 2、一个容量大于8G的U盘&#xff08;推荐16G以上&#xff0c;空盘&#xff09; 3、麒麟服务器操作系统镜像&#xff08;这…

京瓷4501i打印机扫描步骤_京瓷复印机扫描设置方法–京瓷复印机扫描到电脑设置...

京瓷KM-2050/2550/3035/4035/5035扫描卡设置说明 扫描至PC设置步骤 (老款京瓷复印机扫描,新款下方有更新) 京瓷复印机扫描到电脑设置 1.(1)首先在所在设备上安装京瓷扫描组件。 (2)在初始设定/扫描初始设定/基本系统设定/中设定好IP地址。注意DHCP要选择关。 2.设定发件人及…

银河麒麟V10系统安装U盘制作

1、首先打开UltraISO软件&#xff0c;一般选择较新版本的UltraISO软件。 2、 点击工具栏中打开镜像文件工具&#xff0c;如上图红色方框标志按钮&#xff0c;然后在 “打开ISO文件”对话框中找到下载好的Kylin桌面试用版本Kylin-Desktop-V10-Release-Build1-2101-arm64.iso镜像…

中标麒麟桌面版7.0 u盘安装

一、安装前的准备 1、安装U盘启动盘制作工具ultra ISO软件或rufus 软件 2、通过ultra ISO或Rufus制作u盘启动盘 2.1通过ultra ISO制作U盘启动盘 选择“文件”-----“打开”&#xff0c;打开系统光盘镜像ISO文件 选择“启动”-------“写入磁盘镜像”&#xff0c;制作U盘启动…

电脑硬件问题汇总

1,Q:怎样清除忘记的 CMOS 口令? A: (1)快速短接主版上 CMOS 供电电池附近的“Clear CMOS”跳线&#xff1b; (2)如果机器能启动进入 DOS 或 Windows,可以试按照以下步骤清除 CMOS: C:/>DEBUG -o 70 11 -o 71 ff -q 然后&#xff0c;启动机器。 2,Q:“老鼠”为什么…

计算机常见硬件故障

1,Q:怎样清除忘记的 CMOS 口令? A: (1)快速短接主版上 CMOS 供电电池附近的“Clear CMOS”跳线&#xff1b; (2)如果机器能启动进入 DOS 或 Windows,可以试按照以下步骤清除 CMOS: C:/>DEBUG -o 70 11 -o 71 ff -q 然后&#xff0c;启动机器。 2,Q:“老鼠”为什么“罢工”?…