ComObjFlags() [v1.0.96.00+]

Retrieves or changes flags which control a COM wrapper object's behaviour.

Flags := ComObjFlags(ComObject [, NewFlags, Mask])

Parameters

ComObject

A COM wrapper object.

NewFlags

New values for the flags identified by Mask, or flags to add or remove.

Mask

A bitmask of flags to change.

Flags

All of ComObject's flags (after applying NewFlags, if specified).

Flags

F_OWNVALUE
1
Currently only affects SafeArrays. If this flag is set, the SafeArray is destroyed when the wrapper object is freed. Since SafeArrays have no reference counting mechanism, if a SafeArray with this flag is assigned to an element of another SafeArray, a separate copy is created.

General Remarks

If Mask is omitted, NewFlags specifies the flags to add (if positive) or remove (if negative). For example, ComObjFlags(obj, -1) removes the F_OWNVALUE flag. Do not specify any value for Mask other than 0 or 1; all other bits are reserved for future use.

Related

ComObjActive, ComObjArray

Examples

; Example: Check for the presence of the F_OWNVALUE flag.

arr := ComObjArray(0xC, 1)
if ComObjFlags(arr) & 1
    MsgBox arr will be automatically destroyed.
else
    MsgBox arr will not be automatically destroyed.
; Example: Change array-in-array behaviour.

arr1 := ComObjArray(0xC, 3)
arr2 := ComObjArray(0xC, 1)
arr2[0] := "original value"
arr1[0] := arr2         ; Assign implicit copy.
ComObjFlags(arr2, -1)   ; Remove F_OWNVALUE.
arr1[1] := arr2         ; Assign original array.
arr1[2] := arr2.Clone() ; Assign explicit copy.
arr2[0] := "new value"
for arr in arr1
    MsgBox % arr[0]

arr1 := ""
; Not valid since arr2 == arr1[1], which has been destroyed: 
;  arr2[0] := "foo"