ComObjType() [v1.0.91+]

从 COM 对象获取类型信息。

变量类型 := ComObjType(COM对象)
名称    := ComObjType(COM对象, "Name")
接口ID     := ComObjType(COM对象, "IID")

参数

COM对象

包含 COM 对象或类型化值的包装器对象。

变量类型

表示值类型的整数。请参阅下面。

名称

接口类型名称。

接口ID

表示接口类型的全局唯一标识符 (GUID)。

返回值

如果省略第二个参数, 则返回包装器对象包含的值的变量类型。

如果第二个参数为 "Name" 或 "IID" 并且包装器对象包含 COM 对象 (变量类型 VT_DISPATCH), 则返回 COM 对象的类型名或其主接口的标识符。

如果参数无效或发生了错误, 则返回空字符串。

变量类型的常量值

VT_EMPTY     =      0  ; 没有值
VT_NULL      =      1  ; SQL 风格的空值
VT_I2        =      2  ; 16 位有符号整数
VT_I4        =      3  ; 32 位有符号整数
VT_R4        =      4  ; 32 位浮点数
VT_R8        =      5  ; 64 位浮点数
VT_CY        =      6  ; 货币
VT_DATE      =      7  ; 日期
VT_BSTR      =      8  ; COM 字符串(带长度前缀的 Unicode 字符串)
VT_DISPATCH  =      9  ; COM 对象
VT_ERROR     =    0xA  ; 错误代码(32 位整数)
VT_BOOL      =    0xB  ; 布尔值真(-1)或假(0)
VT_VARIANT   =    0xC  ; VARIANT(必须与 VT_ARRAY 或 VT_BYREF 组合使用)
VT_UNKNOWN   =    0xD  ; IUnknown 接口指针
VT_DECIMAL   =    0xE  ; (不支持)
VT_I1        =   0x10  ; 8 位有符号整数
VT_UI1       =   0x11  ; 8 位无符号整数
VT_UI2       =   0x12  ; 16 位无符号整数
VT_UI4       =   0x13  ; 32 位无符号整数
VT_I8        =   0x14  ; 64 位有符号整数
VT_UI8       =   0x15  ; 64 位无符号整数
VT_INT       =   0x16  ; 有符号机器整数
VT_UINT      =   0x17  ; 无符号机器整数
VT_RECORD    =   0x24  ; 用户定义类型 - 不支持
VT_ARRAY     = 0x2000  ; SAFEARRAY(安全数组)
VT_BYREF     = 0x4000  ; 到另一种值的指针
/*
 VT_ARRAY / VT_BYREF 与另一个值组合使用 (使用按位 "或"),
 以表示最终的类型。例如, 0x2003 表示 32 位有符号整数的 SAFEARRAY(安全数组),
 而 0x400C 表示到 VARIANT 的指针.
*/

一般说明

在通常情况下, COM 对象的方法或属性的返回值会被转换成 AutoHotkey 支持的适合的数据类型. 没有明确处理的类型通过 VariantChangeType 强制转换成字符串; 如果转换失败或变量类型包含 VT_ARRAY 或 VT_BYREF 标志, 则返回包含此值和其类型的对象.

对于任意变量 x, 如果 ComObjType(x) 返回整数, 则 x 包含 COM 对象包装器.

相关

ComObjValue, ComObjCreate, ComObjGet, ComObjActive

示例

d := ComObjCreate("Scripting.Dictionary")
VarType := ComObjType(d)          ; 对于可脚本化对象总为 9.
Name    := ComObjType(d, "Name")  ;仅对于可脚本化对象有效.
IID     := ComObjType(d, "IID")   ; 同上.
MsgBox 变量类型:`t%VarType%`n变量类型:`t%Name%`n接口ID:`t%IID%