【发布时间】:2013-05-31 04:48:05
【问题描述】:
在 VBA 中,Long 和 Object 数据类型都是 4 字节,即内存地址的大小。这是否意味着,从技术上讲,Object 数据类型不会做 Long 不能做的任何事情?如果是,那么是否可以说 Object 数据类型的存在只是为了让程序员更容易区分变量的用途?
我在考虑 Win32 API 函数声明时提出了这个问题。它们经常被声明为 Long,除非我弄错了,否则它们的返回值只是一个内存地址。似乎将这些函数定义为 Object 会更合适。
我完全不在了吗?提前致谢。
【问题讨论】:
-
Object隐藏了大量的底层复杂性,它底层的 4 字节指针 必须 指向一个 COM 对象 vTable/IDispatch - 你不能分配任何东西的地址否则它并期望它能够工作。 -
我不知道它只能指向 COM 对象。那么,这对 Win32 API 函数有什么影响呢?如果它们返回 COM 指针,那么为什么不将它们声明为 Object 而不是 Long?
-
大多数使用 COM 的 Win32 都是直接使用 COM 接口而不是作为导出函数实现的,我想理论上如果你找到一个确实返回这样的函数(例如 COM 的 CoCreateInstance 的最后一个参数),你可以传递参数
as Object