以动态库链接库 .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.rhkb.cn/news/300202.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化高级技术Echarts(快速上手柱状图进阶操作)

目录 1.Echarts的配置 2.程序的编码 3.柱状图的实现&#xff08;入门实现&#xff09; 相关属性介绍&#xff08;进阶&#xff09;&#xff1a; 1.标记最大值/最小值 2.标记平均值 3.柱的宽度 4. 横向柱状图 5.colorBy series系列&#xff08;需要构造多组数据才能实现…

撸代码时,有哪些习惯一定要坚持?

我从2011年开始做单片机开发&#xff0c;一直保持以下撸代码的习惯。 1.做好代码版本管理 有些人&#xff0c;喜欢一个程序干到底&#xff0c;直到实现全部的产品功能&#xff0c;我以前做51单片机的项目就是这样。 如果功能比较多的产品&#xff0c;我不建议这样做&#xff0…

【Linux】指令

1. 简单指令 whoami 显示当前登入账号名 ls /home 现在有的用户名 adduser 用户名 新加用户&#xff08;必须在root目录下&#xff09; passwd 用户名 给这个用户设置密码 userdel -r 用户名 删除这个用户 pwd 显示当前所处路径 stat 文件名 / 文件夹名 显示文件状…

鸿蒙HarmonyOS 与 Android 的NDK有什么不一样?

1. 序言 就像开发Android要用Android Studio一样&#xff0c;Android Studio&#xff08;简称AS&#xff09;其实是基于IDEAgradle插件android插件开发而来。 鸿蒙系统&#xff0c;你可以认为它和android有点像&#xff0c;但又是超越android的存在&#xff0c;除了手机&…

《C语言深度解剖》(2):详解C语言分支语句和循环

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&am…

Java实现二叉树(上)

1.树型结构 1.1树型结构的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 1.2树型结构的特点…

xshell7连接ubuntu18.04

&#x1f3a1;导航小助手&#x1f3a1; 1.查看ubuntu IP2.开启openssh-server3.静态IP设置4.Xshell连接 1.查看ubuntu IP 输入下面命令查看IP ifconfig -a可以看到网卡是ens33&#xff0c;IP为192.168.3.180。 2.开启openssh-server 1、执行下句&#xff0c;下载SSH服务 s…

openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint

文章目录 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint257.1 功能描述257.2 语法格式257.3 示例 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint 257.1 功能描…

SVM简介 详细推导 核函数 线性可分 非线性可分

注意&#xff1a;由于该文章由jupyter nbconvert导出&#xff0c;若单独执行代码可能出现变量找不到或者没有导入库的情况&#xff0c;正确的做法是将所有的代码片段按顺序放到一个.py文件里面或者按顺序放入一个.ipynb文件的多个代码块中。 SVM(Support Vector Machine) Vap…

2024年C语言最新经典面试题汇总(21-30)

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

Java——数据类型、运算符、逻辑控制、方法、数组

1.前置知识 Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象理论…

Spring Security——07,授权_从数据库查询权限信息

授权_从数据库查询权限信息 一、RBAC权限模型二、准备工作2.1 创建数据表2.2 准备表数据2.3 准备查询语句2.4 创建一个实体类Menu 三、代码实现3.1 创建一个MenuMapper3.2 创建对应的mapperXML文件3.3 配置mapperXML文件的位置3.4 UserDetailsServiceImpl查询权限信息 四、测试…

JAVA并发编程(一)

JAVA并发编程&#xff08;一&#xff09; 1.1JAVA线程API 1.1.1currentThread package com.lisus2000.thread;/** * 当前线程 * */ public class Test07 extends Thread {public Test07() {System.out.println("new Test07()......" Thread.currentThread().getNa…

深入浅出 -- 系统架构之微服务架构

1.1 微服务的架构特征&#xff1a; 单一职责&#xff1a;微服务拆分粒度更小&#xff0c;每一个服务都对应唯一的业务能力&#xff0c;做到单一职责 自治&#xff1a;团队独立、技术独立、数据独立&#xff0c;独立部署和交付 面向服务&#xff1a;服务提供统一标准的接口&…

就业班 第二阶段(python) 2401--4.7 day3 python3 函数

八、文件操作 1、读取键盘输入 input 获取标准输入&#xff0c;数据类型统一为字符串 #!/usr/bin/python # -*- coding: UTF-8 -*- str input("请输入&#xff1a;") print&#xff08;"你输入的内容是: ", str&#xff09; 这会产生如下的对应着输入的…

网络安全培训完就业一般,为什么还有那么多人学?

无论如何&#xff0c;即使网上说找工作有多难&#xff0c;互联网行业的薪水普遍比传统行业高&#xff0c;这是毫无疑问的事实。 现在这种offer颗粒无收或者计科应届生出来薪资降低的这种情况都是跟前两年的情况对比来讲的&#xff0c;网络安全是个有前景的专业这个事实谁也不能…

xilinx 7系列fpga上电配置

一、前言 Xilinx FPGA通过加载比特流到内部存储单元来进行配置。 Xilinx FPGA存在两种数据配置路径&#xff0c;一种是满足最小引脚需求的串行路径&#xff0c;一种是可用8位、16位或32位来连接到行业的高性能通用接口&#xff0c;如处理器&#xff0c;8位或者16位并行的闪存…

[问题记录] oracle问题汇总记录

plsql问题 1、oracle-initialization error could not locate OCI.dll 下载plsql客户端后&#xff0c;登录显示如图所示的错误 解决方法&#xff0c;点击下方链接&#xff0c;下载64位客户端 Instant Client for Microsoft Windows (x64) 64-bit (oracle.com) 2、显示中文乱…

影院座位选择简易实现(uniapp)

界面展示 主要使用到uniap中的movable-area&#xff0c;和movable-view组件实现。 代码逻辑分析 1、使用movable-area和movea-view组件&#xff0c;用于座位展示 <div class"ui-seat__box"><movable-area class"ui-movableArea"><movab…

Android 11属性系统初始化流程

在init进程启动的第二阶段&#xff0c;调用PropertyInit 对属性系统进行初始化 int SecondStageMain(int argc, char** argv) {//省略PropertyInit();//省略 }PropertyInit函数在system\core\init\property_service.cpp 中实现 void PropertyInit() {//省略mkdir("/dev/…