ComObjArray() [v1.0.91+]

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

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

Parameter

VarTyp
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

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

Rückgabewert

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

Methoden

Array-Wrapper-Objekte unterstützen die folgenden Methoden:

Array.MaxIndex(n): Gibt die Obergrenze der n-ten Dimension zurück. Wenn n weggelassen wird, wird standardmäßig 1 verwendet.

Array.MinIndex(n): Gibt die Untergrenze der n-ten Dimension zurück. Wenn n weggelassen wird, wird standardmäßig 1 verwendet.

Array.Clone() [v1.0.96.00+]: Gibt eine Kopie des Arrays zurück.

Array._NewEnum() [v1.0.96.00+]: Wird üblicherweise nicht via Skript aufgerufen; ermöglicht die Nutzung von For-Schleifen mit SafeArrays.

Allgemeine Bemerkungen

Array-Wrapper-Objekte können auch von COM-Methoden und ComObjActive() zurückgegeben werden. Skripte können wie folgt prüfen, ob ein Wert ein Array ist:

if ComObjType(obj) & 0x2000
    MsgBox % "Array-Subtyp: " . ComObjType(obj) & 0xfff
else
    MsgBox Kein Array.

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

[v1.0.96.00+]: 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.

[v1.1.17.00+]: 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.

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"
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:
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]