万能动态库调用工具IDMA

开发者:马兆瑞     QQ/微信:624762543

百度云下载链接:https://pan.baidu.com/s/1skW5W4H

CSDN下载链接:http://download.csdn.net/download/mzhrdd/10138218

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 关于函数名及参数的调整
       不管通过哪种方式获取的函数,都可以通过手动修改的方式,对函数名及参数进行调整。
    通过右击已添加参数的行首,或底部的 按钮,可对函数的参数个数进行调整
    
附录 关于参数数据格式的详细说明
    本工具将所有的数据类型归为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

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

万能动态库调用工具IDMA(InvokeDllMethodsAdvance)的更多相关文章

  1. delphi之动态库调用和串口通讯

    串口通讯: Spcomm 控件属性: CommName  :表示COM1,COM2等串口的名字: BaudRate:设定波特率9600,4800等 StartComm StopComm 函数Write ...

  2. Linux 静态库&动态库调用

    1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...

  3. c++动态库封装及调用(3、windows下动态库调用)

    1.DLL的隐式调用 隐式链接采用静态加载的方式,比较简单,需要.h..lib..dll三件套.新建“控制台应用程序”或“空项目”.配置如下: 项目->属性->配置属性->VC++ ...

  4. Windows下动态库的编译以及调用

    1.MFC下生成动态库 1>显式调用 在.cpp文件里添加接口函数 int sum(int a,int b) { return a + b; } int sub(int a,int b) { r ...

  5. java使用JNA框架调用dll动态库

    这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative.其中JNA调用DLL是最方便的. ·JNI ·JNA ·JNative java使用 JNI来调用dll动态 ...

  6. c++调用动态库失败解决办法

    c++调用动态库失败解决办法 之前写好的程序今天早上过来发现在服务器上出错了,于是就各种查问题,整整一个早上外加下午两个小时都在查这个问题,最终被我找到了问题: 在程序中我发现LoadLibrary( ...

  7. 【转】分析Linux和windows动态库

    原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...

  8. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  9. C 高级编程3 静态库与动态库

    http://blog.csdn.net/Lux_Veritas/article/details/11934083http://www.cnblogs.com/catch/p/3857964.html ...

随机推荐

  1. socket__服务端于客户端

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/23 15:33 # @Author : Mr_zhang # @Site ...

  2. Django之环境搭建以及初始配置

    Django采用MVC架构,百度百科介绍如下: 全名Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业 ...

  3. 2D特效和3D特效

    2D居中效果 div{ width: height: backgroundcolor: position:absolute; left:50%; top:50%; transform:translat ...

  4. Elasticsearch 索引别名与Template

    在使用elasticsearch的时候,经常会遇到需要淘汰掉历史数据的场景. 为了方便数据淘汰,并使得数据管理更加灵活,我们经常会以时间为粒度建立索引,例如: 每个月建立一个索引:monthly-20 ...

  5. Lua中metatable和__index的联系

    Lua中metatable和__index的联系 可以参考 http://blog.csdn.net/xenyinzen/article/details/3536708 来源 http://blog. ...

  6. Leetcode题解(28)

    90. Subsets II 题目 分析:代码如下 class Solution { public: vector<vector<int> > subsetsWithDup(v ...

  7. 关于狄克斯特拉算法(dijkstra)总结

    1,2,4是四个定点其他的是距离,从2到4最直接的就是2-4,但是不是最近的,需要舒展一下2-1-4,这样只有8.所以才是最短的.这个过程就是狄克斯特拉算法.下面进入正题:   我们这里定义图的编号为 ...

  8. SVN提交文件的时候过滤指定文件

    如果使用TortoiseSVN作为客户端的话,可以在TortoiseSVN右键菜单中的 "设置"(settings)--常规设置(General)--全局忽略样式里设置(Globa ...

  9. js实现前端下载文件

    在前端下载文本格式的文件时,可采用下面的方式: (1)创建基于文件内容的Blob对象: (2)通过URL上的createObjectURL方法,将blob对象转换成一个能被浏览器解析的文件地址. (3 ...

  10. bash脚本条件测试总结

    一.if语句的结构 分为以下三种:单分支.双分支.多分支 单分支if语句 if CONDITION is True: then 分支 fi 双分支if语句 if CONDITION is True: ...