如何查看dll中的函数_如何在VB.NET、VSTO中使用API函数?

5876e6628ce15d6f4b11c08de2fefc83.png

在VBA中可以使用API函数来拓展VBA的功能。

比如在VBA中插入一个标准模块,然后输入如下的代码:

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Const SW_SHOWNORMAL = 1Sub exceloffice()    Dim sUrl As String    sUrl = "https://www.baidu.com/"    ShellExecute 0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMALEnd Sub

就可以用api函数ShellExecute打开指定的网页。

如果要把上述的API函数迁移到VSTO、VB.NET中,直接拷贝复制进去是不行的,需要做以下几个步骤

1.单击“项目”菜单,“添加模块”,选择"模块",确定。

549f938e1aa4de3e4d85187e95d7136b.png

cca292f4789dfbf22c5b64e2b5c23bcd.png

2.拷贝上述代码到

Module Module1

End Module

之间,如下所示

Module Module1    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long    Public Const SW_SHOWNORMAL = 1    Sub exceloffice()        Dim sUrl As String        sUrl = "https://www.baidu.com/"        ShellExecute 0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL    End SubEnd Module

3.最关键的,也是最重要的一步,单击Ctrl+H组合快捷键,把API函数声明部分的"As Long"批量替换为"AS Integer"。

如下所示

d33dd4fb1da183ac4d12cd7163f2c42e.png

替换后的代码如下所示

Module Module1    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer    Public Const SW_SHOWNORMAL = 1    Sub exceloffice()        Dim sUrl As String        sUrl = "https://www.baidu.com/"        ShellExecute 0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL    End SubEnd Module

为什么要做这个动作呢?

因为在VB.NET中Integer变量类型使用4个字节存储有符号的整数(也就是32位),同VBA中的Long变量类型是一样的。

而VB.NET中Long变量类型是使用8个字节存储有符号的整数(也就是64位)。

4.最后还需要将API函数的参数用括号括起来,这是VB.NET与VBA的一个最显著的区别。

ShellExecute 0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL

改成

ShellExecute(0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL)

VBA中如果是对象的方法,函数的调用等可以不带括号使用,但是在VB.NET中括号是不能缺少的。

最后的代码如下

Module Module1    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer    Public Const SW_SHOWNORMAL = 1    Sub exceloffice()        Dim sUrl As String        sUrl = "https://www.baidu.com/"        ShellExecute(0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL)    End SubEnd Module

通过上述几个步骤,就可以顺利地在VB.NET、VSTO中使用API函数了。

怎么样,将VBA中的API代码迁移到VB.NET中就是这么简单,你学会了吗?

9aaa5135ab126e6cb1bb428d6e800170.png

DLL函数查看器V3.5 (2012.03.16) =========================== *修复拖放/CTRL+C/"输出文件"空内容的问题 *修复无法复制UNICODE函数声明问题 *新增选项设置可选复制函数声明是否"公开" *新增检索数据库功能(数据库已知函数统一查询) DLL函数查看器V3.4 (2011.09.11) =========================== *修复部分EXE文件导入表函数反汇编无识别的问题 *修复"总在最前"时"选项设置"窗口无法显示的问题 *修复数据处理等待画面引起的程序意外退出的问题 DLL函数查看器V3.3 (2011.08.28) =========================== *修复插件无法正常使用的问题 *修复设置文字焦点颜色无效的问题 *新增添加到系统右键菜单支持 *新增查找功能 DLL函数查看器V3.2 (2011.07.20) =========================== *修正对某些程序数据分析可能引起的程序崩溃 *修正对某些加壳程序反汇编可能引起的程序崩溃问题 *优化了反汇编代码并修复1处错误 *新增系统菜单条"选项设置"项 *新增系统菜单条"总在最前"项 *新增插件支持 DLL函数查看器V3.1 (2011.06.28) =========================== *修正了PE分析的文件时间计算错误 *修正了未文档化函数无法输出到文件的错误 *修正了反汇编的几处函数名称错误 *修正了各种系统下无法启动等其他多处问题 *修改了可以同时启动多个副本 *修改了多选情况可以复制所选的全部函数声明 *修改了反汇编跳转后回退到上次跳转处 *新增反汇编是否"到首返回"选项(或按"MaxLine") DLL函数查看器V3.0 (2011.05.18) =========================== * 修正了引入函数名显示不全的问题 * 修正了未公开函数名的函数序数计算错误 * 修正了未公开函数名的函数地址错误 * 修改导出函数地址为"真实地址" * 修改函数序数为"真实序数" * 新增命令行参数支持 * 新增列表排序功能 * 新增列表任意项目复制 * 新增列表输出文件与拖放输出 * 新增列表键入/粘帖函数名行定位 * 新增stdcall约定函数猜测参数个数 * 新增反汇编功能 * 新增对已知函数参数查看文解释 * 新增对函数的易语言和VB函数及结构声明 * 新增查壳功能 * 新增查看PE文件头信息 * 美化窗口界面等 感谢使用山寨版DLL函数查看器,遇到问题请发送邮件 infopet@qq.com 因为以前使用 DLL函数查看器2.0 遇到很多功能欠缺,使用起来会有很多的不方便, 所以本人给进行了很多加强,但是依然可以保持使用 DLL函数查看器v2.0 的使用习惯. 嘿嘿!! 您觉得这个山寨版怎么样!? 注: 1.将本程序快捷方式放入系统 "SendTo" 目录后,就可以右键文件"发送到"实现文件快速查看. 2.按粘帖键(Ctrl+V)将剪辑板字符串在列表匹配查找. 3.关于参数量的问题,由于猜解方法过于简单对于部分函数未从当前函数返回,而是"JMP"到别的函数 所以猜解可能会有错误,需要结合已知函数库或反汇编查看,另此方法对于cdecl调用函数无效. 4.关于反汇编视图的"到首返回"如果勾选即表示仅反汇编到头一个RETN为止,否者将按照"DisAsm_MaxLine" 所指定的行数.生效方法参见说明细则12~13. 5.将PEID userdb.txt 放置到程序目录下可以实现查壳. 6.如果将易语言API伴侣DATA下文件复制到本目录,可获得已知函数信息.这首先要感谢API伴侣的作者. 7.在目录下建立 "ViewApi.cfg" ,设置信息将写入配置文件可方便放入优盘等移动存储器使用. 程序启动时会优先读取配置文件,如果文件不纯在则会访问注册表. 8.如果你觉得这个美化窗口很浪费资源,可以打开注册表修改如下项值即可关闭 [HKEY_CURRENT_USER\Software\ViewApiList] "UI"=dword:00000000 9.如果你觉得反汇编影响了效率,可以打开注册表修改如下项值即可关闭 [HKEY_CURRENT_USER\Software\ViewApiList] "DisAsm"=dword:00000000 10.如果想关闭查壳功能可以删除userdb.txt或注册表如下设置 [HKEY_CURRENT_USER\Software\ViewApiList] "CheckShell"=dword:00000000 11.在线查询接口可在注册表如下位置修改,{searchTerms}为保留关键字被作为替换函数名. [HKEY_CURRENT_USER\Software\ViewApiList] "WebSearch"="http://www.baidu.com/s?wd={searchTerms}&ie=utf-8" 12.是否仅反汇编到头一个返回,1.表示是,0表示否. [HKEY_CURRENT_USER\Software\ViewApiList] "DisAsm_Retn"=dword:00000001 13.反汇编最大行数,即表示当前地址向后的长度,与函数实际长度无关.是否生效需要根据"DisAsm_Retn"设置. [HKEY_CURRENT_USER\Software\ViewApiList] "DisAsm_MaxLine"=dword:000003e8 键盘快捷键说明: TAB(SHIFT+TAB) -- 视图焦点切换 CTRL+S -- 视图切换 CTRL+F -- 文字搜索 F3 -- 搜索下一个 CTRL+A -- 项目全选 CTRL+C -- 复制选项目函数名称/汇编代码 CTRL+V -- 将剪辑板的字符在视图匹配搜索 ALT+← -- 反汇编视图上一次跳转的后退 ALT+→ -- ... 前进 Application -- 弹出右键菜单(右WIN键和右CTRL键间的那个键)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值