获取或改变控制 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"