常规智慧:
在最新版本的VBA(VBA7)中,使用
LongPtr
类型表示在32位和64位系统上均有效的指针。在旧版本的VBA,请使用Long
表示指针(假设是32位主机,但this is a safe assumption,因为所有64位主机都使用最新的版本的VBA)。
LongPtr到底是什么?好吧,根据VBA language reference:
LongPtr
(在32位系统上为Long
整数,在64位系统上为LongLong
整数系统)
这两条信息证实了一个事实:在32位系统上,指针占用4个字节,应该存储在Long
中;在64位系统上,指针占用8个字节,应该存储在[[ C0]
通过扩展,LongLong
看起来有点像这样:
LongPtr
即指针大小直接链接到主机位数。以我的经验,这种解释一直很好。
如#If Win64 Then
typedef LongPtr As LongLong
#Else
typedef LongPtr As Long
#End If
中所指出的,指针tend的大小与体系结构的位数相同。例如。对于32位程序,指针是4个字节,对于64位程序,指针是8个字节。 但是没有必要一定要这样做的理由;具有64位内存大小的程序仍可以使用32位指针对其进行导航。
这很有意义,您可以考虑一下。仅仅因为我的64位程序使用了8个字节的块来拆分其内存,并不意味着我需要2 ^ 64个不同的可能的指针来导航它。我总共可能只有16个字节的内存,在这种情况下,我的指针可能只是this question或1
!
所以我的问题:
第2.3节之前的两个段落
0
“还定义了一个实现定义的LongPtr类型别名,映射到该实现将用于保存指针或处理值的基础声明类型。32位实现应将LongPtr映射到Long,而64位实现应将LongPtr映射到LongLong,尽管实现可以将LongPtr映射到实现定义的指针类型。LongPtr类型别名在其基础声明的类型有效的任何地方都有效。