当前位置: 首页 > news >正文

以动态库链接库 .dll 探索结构体参数

Dev c++ C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客

 在写dll 插件中发现的函数指针用途和 typedef 的定义指针的用法-CSDN博客

两步之后,尝试加入结构体实现整体数据使用。

注意结构体 Ak

是相同的

代码如下

DLL文件有两个,dll.dll是上面提到的链接里的

dllv2.dll是这个代码里的

dllv2.cpp

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <iostream>using namespace std;void mainDll(){ak.count++;ak.number=1; ak.x=0;ak.y=0;cout<<"atking"<<endl;for(int i=0;i<10;i++){ak.x++;}cout<<"count: "<<ak.count<<endl;
}
// dll.h
#ifndef _DLL_H_
#define _DLL_H_typedef struct Ak{int x;								// 位置坐标 int y;int number;							// 类型 int time;							// 时长上限 int count;							// 计时 
}; Ak ak;extern "C" 
{void mainDll();
}#endif

 主程序代码如下

#include <windows.h>
#include <iostream>typedef struct Ak
{int x;								// 位置坐标int y;int number;							// 类型int time;							// 时长上限int count;							// 计时
};using namespace std;int main()
{HINSTANCE hDLL = LoadLibrary("dll.dll"); 								// 填文件名HINSTANCE hDLLv2 = LoadLibrary("dllv2.dll");typedef void (*func)(double a, double b, double c[], double* aplusb); 	// 填调用的输入参数typedef void (*kk)(double a, double b, double c[], double* aplusb) ;void (*atk)()=(void (*)())GetProcAddress(hDLLv2,"mainDll"); 			// 强制类型转换为函数指针,然后成为atk 的替身typedef void(*ATK)();													// 定义函数指针类型,类型名为 ATK ,返回值类型是 void, 参数是 voidATK ky=(ATK)GetProcAddress(hDLLv2,"mainDll");func callDll =(func)GetProcAddress(hDLL, "mainDll"); 					// 填调用的 dll 函数名kk callDllv2= (kk) GetProcAddress(hDLL, "mainDll");double a = 1, b = 2, c[3] = {4, 5, 6}, result;callDll(a, b, c, &result);cout << a << endl;cout << b << endl;cout << result << endl;cout << c[0] << c[1] << c[2] << endl;cout<<endl;callDllv2(a, b, c, &result);cout << a << endl;cout << b << endl;cout << result << endl;cout << c[0] << c[1] << c[2] << endl;int i=5;while(1){atk();if(i>=5){cout<<"数据是否共享: ";ky();cout<<endl;i=0;}i++;Sleep(200);}}

http://www.lryc.cn/news/335876.html

相关文章:

  • vue快速入门(三)差值表达式
  • RabbitMQ的交换机与队列
  • Spring的 IOC和AOP编程思想
  • Qt中显示hex数据的控件
  • python web 开发 - 常用Web框架
  • 设计模式——适配器模式06
  • 【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink
  • Web 前端性能优化之八:前端性能检测实践
  • 安装VMware ESXi虚拟机系统
  • Vue3实践之全局请求URL配置和请求参数说明
  • 类和对象—初阶
  • 【Linux】shell 脚本基础使用
  • nfs部署--相关记录
  • java国产化云HIS基层医院系统源码 SaaS模式
  • docker 部署 Epusdt - 独角数卡 dujiaoka 的 usdt 支付插件
  • 数据结构排序之冒泡、快速、插入、选择、堆、归并等排序及时间,空间复杂度等(超详解,绝对能满足你的需求,并能学到很多有用知识)
  • 如何在windows环境和linux环境运行jar包
  • 2602B吉时利2602B数字源表
  • Linux——fork复制进程
  • 李廉洋:4.10黄金原油晚间走势最新分析及策略。
  • 【头歌-Python】字符串自学引导
  • 44-技术演进(下):软件架构和应用生命周期技术演进之路
  • 【C++】C++中的list
  • uniapp:Hbuilder没有检测到设备请插入设备或启动模拟器的问题解决
  • 基于RBF的时间序列预测模型matlab代码
  • vue vue3 手写 动态加载组件
  • HTML:表单
  • 即插即用篇 | YOLOv5/v7引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块
  • Plonky2.5:在Plonky2中验证Plonky3 proof
  • 卷积通用模型的剪枝、蒸馏---剪枝篇(此处以deeplabv3+为例,可根据模型自行定制剪枝层)