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

dftg