GPT4: VBA 从 32位升级到64位后,使用 WinAPI 函数, 函数声明的变化?

相关 微软中文文档 64 位 Visual Basic for Applications 概述

在将 VBA 从 32 位升级到 64 位后,使用 WinAPI 函数时,函数声明需要进行相应的更改。以下是一些主要的变化:

  1. 数据类型:

对于指针和句柄,需要将数据类型从 Long 更改为 LongPtrLongPtr 能够在 32 位和 64 位系统中分别兼容 LongLongLong

示例:

' 32位系统中
Declare Function GetActiveWindow Lib "user32" () As Long

' 64位系统中
Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
  1. 声明函数时添加 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
  1. 兼容性:

为了确保代码在 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 或更高,则使用 PtrSafeLongPtr

总之,在将 VBA 从 32 位升级到 64 位后,需要注意数据类型的更改、添加 PtrSafe 关键字以及确保代码的兼容性。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论