在 VBA 中,Long 和 Object 数据类型都是 4 字节,即内存地址的大小。这是否意味着,从技术上讲,Object 数据类型不会做 Long 不能做的任何事情?如果是,那么是否可以说 Object 数据类型的存在只是为了让程序员更容易区分变量的用途?
这个问题出现在我考虑 Win32 API 函数声明时。它们经常被声明为 Long,除非我弄错了,否则它们的返回值只是一个内存地址。那么,似乎将这些函数定义为 Object 会更合适。
我完全没戏了吗?提前致谢。
基于 VBA/MSDN 帮助:
长(长整数)变量存储为带符号的 32 位(4 字节)数字,值范围从 -2,147,483,648 到 2,147,483,647。
和另一个定义:
对象变量存储为引用对象的 32 位(4 字节)地址。使用 Set 语句,声明为 Object 的变量可以分配给它的任何对象引用。
从实际的角度来看,它们都是不同的,并且在不同的情况下使用。哪些是必不可少的:Long >> 指的是数字,Object >> 指的是 object。
查看以下 VBA 代码(用于 Excel),我在其中添加了允许和不允许的注释:
Sub test_variables()
Dim A As Object
Dim B As Long
'both below are not allowed, throwing exceptions
'A = 1000
'Set B = ActiveSheet
'both are appropriate
Set A = ActiveSheet
B = 1000
End Sub
最后,就 API 而言,最好保留原始声明,不要对其进行操作,以避免对 API 函数的意外行为造成任何风险。