创建用于 COM 的安全数组(SafeArray)
ArrayObj := ComObjArray(VarType, Count1 [, Count2, ... Count8])
可用值的列表见ComObjType。
每个维度的大小。支持最多 8 维的数组。
包含 安全数组 的包装器对象。
数组包装器对象支持下列方法:
Array.MaxIndex(n)
:返回第 n 维的上界。如果 n 省略,默认为 1。
Array.MinIndex(n)
:返回第 n 维的下界。如果 n 省略,默认为 1。
Array.Clone()
[v1.0.96.00+]:返回数组的副本。
Array._NewEnum()
[v1.0.96.00+]:通常不是由脚本调用;允许for循环与 安全数组 一起使用。
COM 方法和 ComObjActive 也可以返回数组包装器对象。脚本中可以使用如下方法判断一个值是否为数组:
if ComObjType(obj) & 0x2000 MsgBox % "数组子类:" . ComObjType(obj) & 0xfff else MsgBox 非数组。
可以支持多达 8 维的数组。
[v1.0.96.00+]: 由于 安全数组 未被设计为支持多重引用,故当一个 安全数组 被赋值为另一个 安全数组 的元素时,会创建一个独立的副本。不过,仅当包装器对象含有 F_OWNVALUE 标志时才会发生这种情况,这个标志表示它负责销毁此数组。此标志可用ComObjFlags移除。
[v1.1.17.00+]:当被COM客户端调用的函数或方法返回一个带有F_OWNVALUE标志的 安全数组 时,将建立并返回一个副本,而原 安全数组 将自动销毁。
ComObjType, ComObjValue, ComObjActive, ComObjFlags, Array Manipulation Functions(数组操作函数) (MSDN)
; 示例 #1: 简单用法。 arr := ComObjArray(VT_VARIANT:=12, 3) arr[0] := "Auto" arr[1] := "Hot" arr[2] := "key" Loop % arr.MaxIndex() + 1 t .= arr[A_Index-1] MsgBox % t
; 示例 #2: 多维数组。 arr := ComObjArray(VT_VARIANT:=12, 3, 4) ; 获取数组的维数个数: dim := DllCall("oleaut32\SafeArrayGetDim", "ptr", ComObjValue(arr)) ; 获取各维数的边界: Loop %dim% dims .= arr.MinIndex(A_Index) " .. " arr.MaxIndex(A_Index) "`n" MsgBox %dims% ;简单用法: Loop 3 { x := A_Index-1 Loop 4 { y := A_Index-1 arr[x, y] := x * y } } MsgBox % arr[2, 3]