相关 微软中文文档 64 位 Visual Basic for Applications 概述
在将 VBA 从 32 位升级到 64 位后,使用 WinAPI 函数时,函数声明需要进行相应的更改。以下是一些主要的变化:
- 数据类型:
对于指针和句柄,需要将数据类型从 Long
更改为 LongPtr
。LongPtr
能够在 32 位和 64 位系统中分别兼容 Long
和 LongLong
。
示例:
' 32位系统中
Declare Function GetActiveWindow Lib "user32" () As Long
' 64位系统中
Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
- 声明函数时添加
PtrSafe
关键字:
在声明 WinAPI 函数时,需要在 Declare
关键字后添加 PtrSafe
关键字。这表明函数在 64 位系统中是兼容的。
示例:
' 32位系统中
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
' 64位系统中
Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As Long) As Long
- 兼容性:
为了确保代码在 32 位和 64 位系统上均可运行,可以使用条件编译。例如:
#If VBA7 Then
Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
#Else
Declare Function GetActiveWindow Lib "user32" () As Long
#End If
在上面的示例中,使用 VBA7
条件编译指令来检查 VBA 版本。VBA 7 引入了 64 位支持,因此如果 VBA 版本为 7 或更高,则使用 PtrSafe
和 LongPtr
。
总之,在将 VBA 从 32 位升级到 64 位后,需要注意数据类型的更改、添加 PtrSafe
关键字以及确保代码的兼容性。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
请登录后发表评论
注册