ComObjFlags

获取或改变控制 COM 包装器对象行为的标志.

Flags := ComObjFlags(ComObj , NewFlags, Mask)

参数

ComObj

类型: ComValue

COM 包装器对象.

NewFlags

类型: 整数

Mask 标识的 flags 的新值, 或要添加或删除的 flags.

Mask

类型: 整数

更改 flags 的位掩码.

返回值

类型: 整数

此函数返回指定 COM 对象的当前标志(如果指定, 在应用 NewFlags 之后).

错误处理

如果 ComObj 不是 COM 包装对象, 则抛出 TypeError.

Flags

Flag 效果
1

F_OWNVALUE

SafeArray: 如果设置了 flag, 则在释放包装对象时, 会销毁 SafeArray. 由于 SafeArrays 没有引用计数机制, 因此, 如果将带有 flag 的 SafeArray 赋值给另一个 SafeArray 的元素, 则会创建一个单独的副本.

BSTR: 如果设置了 flag, 则在释放包装对象时, 会释放 BSTR. 当 BSTR 作为由 ComValue(如 ComValue(8, "example")) 执行的类型转换的结果被分配时, 该 flag(标志) 被自动设置.

备注

如果省略 Mask, 则 NewFlags 指定需要添加的(正数) 或移除的(负数) flags. 例如, ComObjFlags(obj, -1) 移除 F_OWNVALUE flag. 不要为 Mask 指定 0 或 1 以外的任何值; 所有其他位保留供将来使用.

ComValue, ComObjActive, ComObjArray

示例

检查是否存在 F_OWNVALUE 标志.

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"
unixetc