万能动态库调用工具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

注:工具中会自动将带&或*的参数识别为出参,其余的算作入参,如与实际情况不符,请自行调整。

posted @ 2017-11-30 09:50  VitalMa  阅读(2398)  评论(2编辑  收藏  举报