📜  vba 声明 64 位 ptrsafe - VBA (1)

📅  最后修改于: 2023-12-03 14:48:17.243000             🧑  作者: Mango

VBA声明64位PtrSafe

在32位的Windows版本中,VBA代码实际上使用的是32位指针。但是在64位版本的Windows中,32位指针在某些情况下会出现问题。解决这个问题的方法是使用64位指针,这就要用到PtrSafe。

声明

在使用64位指针时,需要把PtrSafe关键字加到函数或者过程声明中。下面是一个例子:

#If VBA7 Then
    Private Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As LongPtr
#Else
    Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
#End If

以上代码演示了如何使用PtrSafe来声明GetCurrentProcessId函数,它返回当前进程的ID号。VBA7是一个编译器常量,用来检测代码是否在64位Windows版本中运行,如果是,则使用PtrSafe关键字。

数据类型

在使用64位指针时,还需要注意数据类型。64位Windows版本中,LongLongPtr数据类型的长度不同。因此,我们需要根据需要分别使用这两种数据类型。

以下是一些可能用到的数据类型:

  • LongPtr:32位或64位指针,视Windows版本而定。
  • LongLong:64位整型。
  • ULongPtr:32位或64位无符号整型指针,视Windows版本而定。

例如,下面的代码演示了如何使用LongPtr

Dim lpResult As LongPtr
lpResult = 0
lpResult = StrPtr("Hello, world!")

以上代码使用了StrPtr函数返回一个指向字符串的指针,结果存储在lpResult变量中。

总结

在64位Windows版本中,使用PtrSafe关键字并正确声明数据类型是确保VBA代码正常运行的关键。希望这篇文章对你有所帮助!