万能动态库调用工具IDMA(InvokeDllMethodsAdvance)
万能动态库调用工具IDMA
开发者:马兆瑞 QQ/微信:624762543
版本说明及下载链接:
【V20.1.9】版本说明:1、修复出参对汉字长度截取错误,出现数组超出索引。 2、修复入参汉字无法缓存问题。3、对unsigned char、char等入参自动识别为整数类型。
CSDN下载链接:https://download.csdn.net/download/mzhrdd/12095452
百度云下载链接:https://pan.baidu.com/s/1VMRgIfInav3Ih-x0WLP6vg 提取码: 3cd4
【V3.3】版本说明:1、修复通过鼠标右键插入参数时参数勾选异常问题
百度云下载链接:https://pan.baidu.com/s/1Rh2evdcqL8REiPSKNhVH7w 提取码: 9e6x
【V3.2】版本说明:1、参数勾选框更易选中 2、试用期延长为90天
CSDN下载链接:https://download.csdn.net/download/mzhrdd/10925695
百度云下载链接:https://pan.baidu.com/s/1R4YS2P3-PKt1rhM-8JnUBg
【V3.0】版本说明:1、修复HEX出参解析Bug 2、缓存已调用函数的入参,方便再次调用
百度云下载链接:https://pan.baidu.com/s/1c3670kw
【V2.0】版本说明:初版
CSDN下载链接:http://download.csdn.net/download/mzhrdd/10138218
百度云下载链接:https://pan.baidu.com/s/1o864oFg
如以上资源不能下载,请从原文出处获取最新下载链接:
博客原文:http://www.cnblogs.com/mzhrd/p/7927582.html
1. 工具简介
1.1 工具示意图
1.2 功能简介
InvokeDllMethodsAdvance简称IDMA,是一个万能的动态库调用工具,不用编写任何代码,就可以调用符合WINAPI标准的任意动态库文件(WINAPI标准即__stdcall调用约定)。
此工具非常适合上位机软件开发或测试人员,可以省去编写demo的时间,直接使用此工具进行调试,有助于开发人员将更多的时间集中在功能开发上。
本工具的主要优点如下:
不用编写任何代码,即可调用动态链接库。
适合入职新员工或不懂动态链接库调用的人使用。
可以免去测试demo的编写, 减轻开发人员工作量。
非常适合动态链接库的开发调试、测试等工作。
1.3 技术实现
该工具界面主要使用C# WinForm编写,运行依赖于.net framework 4.0环境,底层采用C++封装,用汇编实现对函数的动态调用(函数参数的入栈及调用)
1.4 安装使用
该工具为绿色版,无需安装,直接运行 即可,如果提示缺少.NET环境,则安装 文件夹下的 后,再尝试运行该工具。
2. 主要功能及使用介绍
2.1 主要步骤
1、选择所要调用的动态库文件
2、选择动态库配套的头文件及函数
3、填写完参数后,调用该函数
4、函数的出参或返回值会展示在对应的位置
2.2 选择动态库
该操作完成对动态库的加载LoadLibrary
2.2.1 选择动态库方式一:通过浏览文件选择
点击 按钮可通过浏览的方式选择所要调用的动态库。
2.2.2 选择动态库方式二:通过拖拽文件选择
拖拽所要调用的动态库文件至动态库路径文本框。
2.2.3 选择动态库方式三:同时拖拽动态库和头文件
拖拽所要调用的动态库文件及头文件,至参数列表表格DataGridView。
2.3 选择头文件及函数
选择头文件的方式有三种,同上节中的动态库选择,一种通过按钮的方式,两种通过拖拽的方式。
2.3.1 获取函数的方式一:选择头文件
通过选择头文件建立一个快速的函数切换列表,并自动将选定的函数参数拆分,便于填写和查看出入参。
选定一个函数后,工具会自动将函数拆分出参数类型、参数名称、参数数值、入参/出参、数据格式,如果自动分析出的入参/出参类型、数据格式等不符合实际情况,需自行勾选更改。(参数数值、入参/出参、数据格式是调用函数时最重要的三部分,只要这三部分设置正确,参数类型、参数名称的对错不影响函数的调用,无需关心。关于数据格式的详细说明请见附录)
注:1、头文件中的一个函数只能占一行,不符合需修改后再使用。
2、解析函数功能会自动忽略以下开头的行:/ # { } extern
2.3.2 获取函数的方式二:手动填写函数名及参数
也可以不选择头文件,手动在 中填写需要调用函数名,并在参数列表中追加需要的参数。追加或插入的参数默认为空行,参数数值、入参/出参、数据格式是调用函数时最重要的三部分,只要这三部分填写正确,参数类型、参数名称可不填写。关于数据格式的详细说明请见附录
2.3.3 关于函数名及参数的调整
不管通过哪种方式获取的函数,都可以通过手动修改的方式,对函数名及参数进行调整。
通过右击已添加参数的行首,或底部的 按钮,可对函数的参数个数进行调整
2.4 工具使用示例
在 文件夹下存在一个测试用的动态库文件: ,该动态库导出了一个名为add的函数,函数的具体内部实现如下:
extern "C" int __stdcall add(int num1, int num2, int *multi)
{
*multi = num1 * num2;
return num1 + num2;
}
使用工具调用该动态库的示例如下:
1、选择所要调用的动态库文件。点击选择动态库按钮,通过文件浏览的方式选择test.dll,选择完成后在Path中会显示dll文件的全路径。如下图一。
2、选择动态库配套的头文件及函数。点击选择头文件按钮,通过文件浏览的方式选择test.h,选择完成后在Methods下拉列表中会显示从.h中解析出的所有函数。本示例选择add函数,如下图一。
3、填写完参数后,调用该函数。在Methods下拉列表中选择add函数后,程序会自动解析并将函数的所有参数展示在下方的表格中,填写完入参后,点击Invoke按钮。本示例填写的入参为6和8,如下图一。
4、函数的出参或返回值会展示在对应的位置。本示例的出参为48,返回值为14,如下图二。(0xE是14的十六进制等价显示)
图一
图二
附录 关于参数数据格式的详细说明
本工具将所有的数据类型归为5大类:HEX、整数、字符串、单精度小数、双精度小数。
HEX:为最基础的数据类型,也是最强大的数据类型,可以用来表示任何数据类型(包括结构体),其本质为变量在内存中的实际存储结构,一般用来传递数组(十六进制字符串)。其作为出参时只显示内容的第一个字节,后面的内容用*省略,可双击变量地址,根据实际情况输入需要查看的长度,才可查看完整数据。
例如:int temp1 = 1,则用HEX表示为:01000000,因为int在内存中是低字节在前,共占4个字节
unsigned char temp2[] = {0x12, 0x34, 0x56},则用HEX表示为:123456
char temp3[] = “123456”,则用HEX表示为:313233343536.(因字符’1’的ASCII码为49=0x31)
整数:用来表示常见的数字类型的变量,例如int、long、short等。(如果unsigned char用来表示整数,也需要指定为整数类型)
字符串:用来表示可见字符串,例如“123456”,不可见字符串请用HEX类型(如上述temp2)。
单精度小数:用来表示单精度小数类型,例如float
双精度小数:用来表示双精度小数类型,例如double
注:工具中会自动将带&或*的参数识别为出参,其余的算作入参,如与实际情况不符,请自行调整。