相关 微软中文文档 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
    
  2. 声明函数时添加 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
    
  3. 兼容性:

    为了确保代码在 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 关键字以及确保代码的兼容性。

分类: 学习编程

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注