蘭雅sRGB 个人笔记 https://262235.xyz
提供编程和电脑应用视频教程,工具和源代码
C, C++, Python Programming, Source Code, Video

旧Hexo博客 | Github | IP定位WebAPI | Docker Hub
编程中文文档 | 网盘分享 | 中文Linux命令

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

本原创文章自由转载,转载请注明本博来源及网址 | 当前页面:兰雅sRGB个人笔记 » GPT4: VBA 从 32位升级到64位后,使用 WinAPI 函数, 函数声明的变化?