ComObjArray

Erstellt ein SafeArray, das für COM verwendet werden kann.

ArrayObj := ComObjArray(VarTyp, Anzahl1 , Anzahl2, ... Anzahl8)

ComObjArray selbst ist eine Klasse, die von ComValue abgeleitet ist, aber nur zum Erstellen oder Identifizieren von SafeArray-Wrapper-Objekten verwendet wird.

Parameter

VarTyp

Typ: Integer

Der Basistyp des Arrays (der VARTYPE jedes Array-Elements). Der VARTYPE ist auf eine Teilmenge der Variantentypen beschränkt. Weder das VT_ARRAY- noch das VT_BYREF-Flag können gesetzt werden. VT_EMPTY und VT_NULL sind keine gültigen Basistypen für das Array. Alle anderen Typen sind zulässig.

Eine Liste möglicher Werte finden Sie unter ComObjType.

AnzahlN

Typ: Integer

Die Größe jeder Dimension. Es werden Arrays mit bis zu 8 Dimensionen unterstützt.

Rückgabewert

Typ: ComObjArray

Diese Funktion gibt ein Wrapper-Objekt zurück, das ein neues SafeArray enthält.

Methoden

ComObjArray-Objekte unterstützen die folgenden Methoden:

Bemerkungen

ComObjArray-Objekte können auch von COM-Methoden und ComValue zurückgegeben werden. Skripte können wie folgt prüfen, ob ein Wert ein ComObjArray ist:

; Klasse prüfen
if obj is ComObjArray
    MsgBox "Array-Untertyp: " . ComObjType(obj) & 0xfff
else
    MsgBox "Kein Array."

; Prüfen, ob VT_ARRAY existiert
if ComObjType(obj) & 0x2000
    MsgBox "obj ist ein ComObjArray"

; Bestimmten Array-Typ prüfen
if ComObjType(obj) = 0x2008
    MsgBox "obj ist ein ComObjArray von Zeichenketten"

Es werden Arrays mit bis zu 8 Dimensionen unterstützt.

Da SafeArrays nicht für die Unterstützung von Mehrfachreferenzen ausgelegt sind, wird beim Zuweisen eines SafeArrays an ein Element eines anderen SafeArrays eine separate Kopie erstellt. Dies geschieht jedoch nur, wenn das Wrapper-Objekt das F_OWNVALUE-Flag hat, um zu kennzeichnen, dass es für die Zerstörung des Arrays verantwortlich ist. Dieses Flag kann mit ComObjFlags entfernt werden.

Wenn eine via COM-Client aufgerufene Funktion oder Methode ein SafeArray mit dem F_OWNVALUE-Flag zurückgibt, wird eine Kopie erstellt und stattdessen zurückgegeben, da das originale SafeArray automatisch zerstört wird.

ComValue, ComObjType, ComObjValue, ComObjActive, ComObjFlags, Array Manipulation Functions (Microsoft Docs)

Beispiele

Einfache Verwendung.

arr := ComObjArray(VT_VARIANT:=12, 3)
arr[0] := "Auto"
arr[1] := "Hot"
arr[2] := "key"
t := ""
Loop arr.MaxIndex() + 1
    t .= arr[A_Index-1]
MsgBox t

Mehrere Dimensionen.

arr := ComObjArray(VT_VARIANT:=12, 3, 4)

; Ruft die Anzahl von Dimensionen ab:
dim := DllCall("oleaut32\SafeArrayGetDim", "ptr", ComObjValue(arr))

; Ruft die Grenzen jeder Dimension ab:
dims := ""
Loop dim
    dims .= arr.MinIndex(A_Index) " .. " arr.MaxIndex(A_Index) "`n"
MsgBox dims

; Einfache Verwendung:
Loop 3 {
    x := A_Index-1
    Loop 4 {
        y := A_Index-1
        arr[x, y] := x * y
    }
}
MsgBox arr[2, 3]