相关 微软中文文档 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
关键字以及确保代码的兼容性。