.net 多个dll 封装成一个dll_如何在VB.NET、VSTO中使用API函数?

295dbdfa6eae8701cbaead698d39b43f.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.单击“项目”菜单,“添加模块”,选择"模块",确定。

29d13a71edb79e2e4fd564b06a0bd832.png

8871943c733cb278b948113e9836b154.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"。

如下所示

420d63478de37a40a49ef6799327b4fb.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中就是这么简单,你学会了吗?

9ebc0cf0e1ff4c471fa22f00049573ad.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值