获取或改变控制 COM 包装器对象行为的标志.
Flags := ComObjFlags(ComObj , NewFlags, Mask)
类型: ComValue
COM 包装器对象.
类型: 整数
由 Mask 标识的 flags 的新值, 或要添加或删除的 flags.
类型: 整数
更改 flags 的位掩码.
类型: 整数
此函数返回指定 COM 对象的当前标志(如果指定, 在应用 NewFlags 之后).
如果 ComObj 不是 COM 包装对象, 则抛出 TypeError.
Flag | Effect |
---|---|
1 | F_OWNVALUE. 当前仅影响 SafeArrays. 如果设置了 flag, 则在释放包装对象时, 会销毁 SafeArray. 由于 SafeArray 没有引用计数机制, 因此, 如果将带有 flag 的 SafeArray 赋值给另一个 SafeArray 的元素, 则会创建一个单独的副本. |
如果省略 Mask, 则 NewFlags 指定需要添加的(正数) 或移除的(负数) flags. 例如, ComObjFlags(obj, -1)
移除 F_OWNVALUE flag. 不要为 Mask 指定 0 或 1 以外的任何值; 所有其他位保留供将来使用.
ComValue, ComObjActive, ComObjArray
arr := ComObjArray(0xC, 1) if ComObjFlags(arr) & 1 MsgBox "arr will be automatically destroyed." else MsgBox "arr will not be automatically destroyed."
arr1 := ComObjArray(0xC, 3) arr2 := ComObjArray(0xC, 1) arr2[0] := "original value" arr1[0] := arr2 ; 赋值隐式副本. ComObjFlags(arr2, -1) ; 移除 F_OWNVALUE. arr1[1] := arr2 ; 赋值为原始数组. arr1[2] := arr2.Clone() ; 赋值显式副本. arr2[0] := "new value" for arr in arr1 MsgBox arr[0] arr1 := "" ; 由于 arr2 == arr1[1], 所以后面这句无效, 它已经被销毁了: ; arr2[0] := "foo"