做外贸搜客户的网站/快速优化工具
1.导出变量
1.1不使用_declspec(dllimport)+ _declspec(dllexport)
使用_declspec(dllimport)+ _declspec(dllexport)
1.2win32 mydll+win32 myexe
1.3win32 mydll+qt myexe
2.导出类
使用_declspec(dllimport)+ _declspec(dllexport)
2.1不用关键字
2.2 用关键字win32 mydll+ QT myexe
2.3 用关键字QT mydll+ QT myexe
1.导出变量( 全局变量+ 静态变量)
方式:.def +dll
1.1不使用_declspec(dllimport)+ _declspec(dllexport)
1.111mydll 编写 项目创建: DLL
1.112win32 mydll.cpp
int gdllvar=888;
1.113win32 mydll.def
LIBRARY
EXPORTS
gdllvar CONSTANT
1.121myexe编写
1.1211配置dll,lib,h
配置dll路径:链接器->附加库目录
配置lib文件:链接器->输入
1.1212myexe.cpp编写
取的是DLL中变量的地址,而非值。
不能 gdllvar=100; 这样修改的是地址。
extern int gdllvar; //DLL中的全局变量的地址
int main()
{int myvar=gdllvar; //调用DLL中的全局变量 不行int myvar= *(int *)gdllvar;
}
1.12 使用 _declspec(dllimport)+ _declspec(dllexport)
取的是DLL中变量,改的也是值。
myexe.cpp
# pragma comment(lib,"..\\Debug\\mydll.lib")
extern int _declspec(dllimport) gdllvar;
int main()
{int myvar =gdllvar; //这就是对原dll文件中的值进行操作。
}
1.2win32 mydll+win32 myexe
1.211 win32 mydll 新建项目设置为DLL
1.212 win32 mydll h文件
#ifdef INDLL
#define SPEC _declspec(dllexport)
#else
#define SPEC _declspec(dllimport)
#endif
extern "C"
{SPEC extern int gdllvar1; //声明要导出的全局变量SPEC extern int gdllvar2; //声明要导出的全局变量
}
1.213 win32 mydll cpp文件
#include "stdafx.h"
#ifndef INDLL
#define INDLL
#endif#include "mydll.h"
int gdllvar1=88,gdllvar2=99;
1.22 win32 myexe cpp文件
# include "../mydll/mydll.h"
#pragma comment(lib,"../debug/mydll.lib")int main()
{
int myvar1=gdllvar1;
int myvar2=gdllvar2;
}
1.3 win32 mydll+qt myexe
1.31 win32 mydll
1.311 win32 mydll h文件
1.312 win32 mydll cpp文件
1.32 qt myexe
1.321 qt myexe win32API函数调用
void Dialog::on_pushButton_clicked()
{DWORD dw;HINSTANCE hDLL; // 1.Handle to DLLint n;int *pgdllvar; // Function pointerQString str;hDLL = ::LoadLibrary(L"mydll.dll"); //注意有个Lif (hDLL){pgdllvar = (int*)GetProcAddress(hDLL,"gdllvar");//得到导出变量的实际地址if (!pgdllvar){// 处理错误情况dw = ::GetLastError();FreeLibrary(hDLL);str.sprintf("GetProcAddress failed:%d",dw);QMessageBox::information(this,"Error code",str);}else{n = *pgdllvar;//存放到整型变量n中str.sprintf("%d",n);QMessageBox::information(this,"result",str);FreeLibrary(hDLL); //释放句柄}}else{dw = ::GetLastError();str.sprintf("Load dll failed:%d",dw);QMessageBox::information(this,"Error",str);}
}
1.322 qt myexe QLibrary函数调用
void Dialog::on_pushButton_clicked()
{int n,*pn;QString str;QLibrary lib("Test");if(lib.load()){pn = (int *)lib.resolve("gdllvar");if (!pn){// 处理错误情况QMessageBox::information(this,"Error","resolve failed");}else{n=*pn;str.sprintf("%d",n);QMessageBox::information(this,"result",str);}}else QMessageBox::information(this,"Error","load failed");
}
1.4 win32 mydll
1.411新建项目DLL
1.412 mydll.h
#pragma once
#ifdef INDLL
#define SPEC _declspec(dllexport)
#else
#define SPEC _declspec(dllimport)
#endif class SPEC CMath
{
public:CMath();virtual ~CMath();
public:static double PI; //定义一个类静态变量
};
1.413mydll.cpp
#include "stdafx.h"#define INDLL //这样定义后,Test.h中的SPEC为_declspec(dllexport)
#include "mydll.h"CMath::CMath() {}
CMath::~CMath() {};double CMath::PI = 3.14; //对类静态变量赋值
1.5win32 myexe
1.51 myexe.cpp
#include "pch.h"
#include <stdio.h>
#include "../mydll/mydll.h"
#pragma comment(lib,"../debug/mydll.lib")
int main()
{printf("%f\n", ++CMath::PI); //先让类静态变量自加,然后打印结果return 0;
}
2.导出类 用关键字和不用关键字两种
2.1不用关键字:
设置:项目->属性->生成MAP文件
生成lib,dll,map map中类函数
win32 myexe.cpp
#include "stdafx.h"
#include "../mydll/mydll.h"
#pragma comment(lib,"../debug/mydll.lib")
int _tmain(int argc, _TCHAR* argv[])
{CMath math;printf("%d,%d\n", math.Add(10, 8), math.sub(20,3));return 0;
}
2.2用关键字 win32 mydll+ QT myexe
2.211 win32:mydll.h
2.212 win32 :mydll.cpp
#include "stdafx.h"
#include "Test.h"int CMath::Add(int a, int b)
{return a + b;
}
int CMath::sub(int a, int b)
{return a - b;
}
CMath::CMath(){}
CMath::~CMath(){}
2.213 QT :myexe.cpp
class CMath
{
public:int Add(int a, int b);int sub(int a, int b);~CMath();CMath();
};
void Dialog::on_pushButton_clicked()
{CMath math;QString str;int c= math.Add(2,3);str.sprintf("%d",c);QMessageBox::information(this,"result",str);
}
2.214 QT :myexe.pro
LIBS += -L$$PWD/ ./ -lmydll
2.3用关键字 QT mydll+ QT myexe
创建项目 C++库:
2.31QT mydll.h
#ifndef MYDLL_H
#define MYDLL_H#include "mydll_global.h"
extern "C"
{MYDLL_EXPORT int add(int a ,int b); //宏定义表示是导出函数
}class MYDLL_EXPORT Mydll
{
public:Mydll();
};#endif // MYDLL_H
2.32QT mydll.cpp
#include "mydll.h"Mydll::Mydll()
{
}
int add(int a,int b)
{return a+b;
}
2.33 QT myexe.h
2.33 QT myexe.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QMessageBox>extern "C"
{int add(int a ,int b);
}Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);
}Dialog::~Dialog()
{delete ui;
}void Dialog::on_pushButton_clicked()
{QString str;int sum = add(2,3);str.sprintf("sum=%d",sum);QMessageBox::information(this,"rsult",str);
}
相关文章:

QT(56)-动态链接库-windows-导出变量-导出类
1.导出变量 1.1不使用_declspec(dllimport) _declspec(dllexport) 使用_declspec(dllimport) _declspec(dllexport) 1.2win32 mydllwin32 myexe 1.3win32 mydllqt myexe 2.导出类 使用_declspec(dllimport) _declspec(dllexport) 2.1不用关键…...

TCP传输文件
传输文件和传输信息的区别: 传输信息,只是一条数据,传输文件是多条数据传输信息传输过去一般都会显示,传输文件一般不会显示,一般只是存放在文件中传输文件需要传输,文件大小和文件名称(不然不知…...

vue3:加载本地图片等静态资源
背景 在我们用 vue2 webpack 的时候,加载图片资源是这样用的: <img :src"require(/assets/test.png)" />这样打包后就会触发 file-loader 打包图片资源,在 dist 文件夹中就可以看到这个图片(如果图片较小会打包…...

工作记录------数据库group_concat函数长度问题
工作记录------group_concat函数长度问题 背景:页面在数据展示时,报错,错误显示:String index out of range: -1 异常信息 java.lang.StringIndexOutOfBoundsException: String index out of range: -1at java.lang.String.sub…...

Python基础语法
1 编程环境 1.1 编译环境 pycharmpython/anaconda 1.2 环境设置 File -> settings -> Project interpreter -> 1.3 Hello world 2 条件判断 2.1 例题 【题1】输入一个年份,判断是否是闰年 ①能被4整除,但不能被100整除; ②能被400整…...

windows环境下安装Nginx及常用操作命令
windows环境下安装Nginx及常用操作命令nginx基本概述基本用途nginx安装nginx基本概述 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。基本用途 nginx是一个轻量级高并发服务器,而tomcat并不是。nginx一般被用来做反向代理,将请求转发到应用…...

python excel数据处理?
前段时间做了个小项目,帮个海洋系的教授做了个数据处理的软件。基本的功能很简单,就是对Excel里面的一些数据进行过滤,统计,对多个表的内容进行合并等。之前没有处理Excel数据的经验,甚至于自己都很少用到Excel。记得《…...

Hudi-集成Flink
文章目录集成Flink环境准备sql-client方式启动sql-client插入数据查询数据更新数据流式插入code 方式环境准备代码类型映射核心参数设置去重参数并发参数压缩参数文件大小Hadoop参数内存优化读取方式流读(Streaming Query)增量读取(Increment…...

重新认识 React Hooks useContext
通常来说,React 数据的传递方式都是一层一层把资料 props 传到子层的 就算第二层(Function Component)、第三层(Button Group Compontn) 根本没有用到这个资料,但是为了传到最底层(button) ,每一层还是必须要传props // App.js const App = () => {const [dark, setDark…...

数据库(2)--加深对统计查询的理解,熟练使用聚合函数
一、内容要求 利用sql建立学生信息数据库,并定义以下基本表: 学生(学号,年龄,性别,系号) 课程(课号,课名,学分,学时) 选课࿰…...

stm32f407探索者开发板(十五)——NVIC中断优先级管理
文章目录零、前言一、NVIC中断优先级分组1.1 中断的管理方法1.2 抢占优先级&相应优先级的区别1.3 举例1.4 特别说明1.5 中断优先级分组函数二、NVIC中断优先级设置2.1 中断设置相关寄存器2.2 中断设置优先级2.2.1 中断优先级控制的寄存器组 IP[240]2.2.2 中断使能寄存器组 …...

【Azure 架构师学习笔记】-Azure Logic Apps(6)- Logic Apps调用ADF
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 接上文【Azure 架构师学习笔记】-Azure Logic Apps(5)- 标准和使用量类型的区别 前言 Logic Apps 和 ADF 的搭配使用是常见的组合,它们可以互相弥补各自的不足和…...

python随机获取列表中某一元素
1、利用Python中的random模块中的choice方法 random.choice()可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。 import random arr[1,2,3,4,5,6] print(random.choice(arr))2、利用Python中的random模…...

Nacos微服务笔记
Nacos安装Nacos 的 Github(Tags alibaba/nacos GitHub)下载我们所需的 Nacos 版本,可以选择 windows 或者 Linux。 进入官网,选择合适版本,tar.gz为linux版本,zip为windows版本。下载并解压 nacos-server…...

MAC文件误删怎么办?mac数据恢复,亲测很好用的方法
电脑文件误删,应该很多人都经历过。之前分享了很多关于Windows电脑文件误删如何恢复的方法,那么MAC电脑文件误删该怎么办?有什么好方法可以使得mac数据恢复回来吗?下面就给大家分享一些亲测好用的方法! 一、MAC电脑的文…...

机械革命z2黑苹果改造计划第二番-MacOS实用软件渗透工具
机械革命z2黑苹果改造计划第二番-实用软件 Mac实用工具 这是旧电脑改造计划的第二篇,就是安装一些常用软件和一些渗透测试工具,武装灵魂成为真正的生产力工具 首先推荐一个网站,www.mactools.app,这个软件里边有大多数常用的软…...

【LeetCode】每日一题(4)
目录 题目:1124. 表现良好的最长时间段 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:1124. 表现良好的最长时间…...

Linux内核移植:内核的启动过程分析、启动配置与rootfs必要文件
Linux内核移植:内核的启动过程、启动配置与rootfs必要文件一、启动过程二、启动配置(一)SysV初始化(二)systemd初始化三、rootfs中的启动配置文件1、inittab2、/etc/init.d/rcS 脚本3、fstab4、profile 文件5、其他文件…...

【代码随想录训练营】【Day14】第六章|二叉树|理论基础|递归遍历|迭代遍历|统一迭代
理论基础 二叉树的定义形式有:节点指针和数组 在数组中,父节点的下标为i,那么其左孩子的下标即i*21,右孩子的下标即为i*22 二叉树的常见遍历形式有:前序遍历、后序遍历、中序遍历和层序遍历 前序遍历:二…...

AXI-Stream 学习笔记
参考 https://wuzhikai.blog.csdn.net/article/details/121326701 https://zhuanlan.zhihu.com/p/152283168 AXI4 介绍 AXI4 是ARM公司提出的一种片内总线,描述了主从设备之间的数据传输方式。主要有AXI4_LITE、AXI4_FULL、AXI4_STREAM三种。 AXI4_LITE࿱…...

【Linux】程序进程地址空间
文章目录程序地址空间进程地址空间程序地址空间 在Linux下,这种地址叫做 虚拟地址, 我们在用C/C语言所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由OS统一管理 问:C/C程序地址空间是内存吗? -> 根本就不是内存! 是进程虚拟地址空间 堆栈…...

电压放大器在液滴微流控芯片的功能研究中的应用
实验名称:电压放大器在液滴微流控芯片的功能研究中的应用研究方向:微流控生物芯片测试目的:液滴微流控技术能够在微通道内实现液滴生成,精准控制生成液滴的尺寸以及生成频率。结合芯片结构设计和外部控制条件,可以对液…...

Linux操作系统学习(进程地址空间)
文章目录进程地址空间奇怪的现象什么是进程地址空间???虚拟地址是如何与物理内存联系的?页表是什么呢?为什么要有页表和地址空间,让进程直接访问内存不行吗?现象解释进程地址空间 在我们学习其…...

【排序】快速排序实现
目录 一、快速排序是什么? 二、左右指针法 1.实现原理 2.代码如下: 三、挖坑法 1.实现原理 2.代码如下: 四、前后指针法 1.实现原理 2.代码如下: 五、三数取中 1.实现思想 2.代码如下: 3.使用方法 总结…...

YOLOv5/v7 Flask Web 车牌识别 | YOLOv7 + EasyOCR 实现车牌识别
YOLOv7 Flask Web 车牌识别图片效果展示 本篇博文只包含源码以及使用方式,目前不同提供详细开发教程。 YOLOv7 Flask Web 车牌识别视频效果展示 YOLOv7 + EasyOCR 实现车牌识别 什么是Flask? 简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更…...

【Opencv实战】几十年前的Vlog火了:黑白老照片如何上色?这黑科技操作一定要知道,复原度超高,竟美的出奇~(图像修复神级代码)
导语 哈喽大家好呀!我是每天疯狂赶代码的木木子吖~情人节快乐呀! 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 我们都知道,有很多经典的老照片…...

React源码分析(一)Fiber
前言 本次React源码参考版本为17.0.3。 React架构前世今生 查阅文档了解到, React16.x是个分水岭。 React15及之前 在16之前,React架构大致可以分为两层: Reconciler: 主要职责是对比查找更新前后的变化的组件;R…...

小樽 C++指针—— (壹) 指针变量
(壹) 指针变量 一、指针的概念与定义 二、给指针变量p赋值 三、指针变量的的、-运算 四、无类型指针 五、多重指针 C (壹) 指针变量 小明想把从李华家借来的书——《CCF中学生计算机程序设计》还给李华,但李华不在家,于是把书放到书架第3层的最右边…...

java 代码块 万字详解
概述 : 特点 : 格式 : 情景 : 细节 : 演示 : 英文 : //v,新版编辑器无手动添加目录的功能,PC端阅读建议通过侧边栏进行目录跳转;移动端建议用PC端阅读。😂一、概述 :代码块,也称为初始化块,属于类中的成员&…...

杂项-图片隐写
图片隐写的常见隐写方法: 三基色:RGB(Red Green Blue) 图片文件隐写 1.Firework 使用winhex打开文件时会看到文件头部中包含firework的标识,通过firework可以找到隐藏图片。 使用场景:查看隐写的图片文件…...