ComObjArray() [v1.0.91+]

Erstellt einen SafeArray, das für COM genutzt werden kann.

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

Parameter

VarTyp
Der Basistyp des Arrays (der VARTYPE von jedem Array-Element). Der VARTYPE ist auf eine Teilmenge der Variantentypen beschränkt. Weder das VT_ARRAY- noch VT_BYREF-Flag kann gesetzt werden. VT_EMPTY und VT_NULL sind keine gültigen Basistypen für das Array. Alle anderen Typen sind gültig.

Siehe ComObjType für eine Liste von möglichen Werten.

AnzahlN

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

ArrayObj

Ein Wrapper-Objekt mit dem SafeArray.

Methoden

Array-Wrapper-Objekte unterstützen folgende Methoden:

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

Array.MinIndex(n): Gibt die Untergrenze der n-ten Dimension zurück. Lässt man n weg, 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 vom Skript aufgerufen; ermöglicht es, For-Schleifen in Kombination mit SafeArrays zu verwenden.

Allgemeine Bemerkungen

Array-Wrapper-Objekte können auch von COM-Methoden und ComObjActive() zurückgegeben werden. Skripte können wie folgt überprü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 keinen Mechanismus zum Zählen von Referenzen haben, wird eine separate Kopie erstellt, wenn ein SafeArray einem Element eines anderen SafeArrays zugewiesen wird. Das geschieht allerdings 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 Funktion oder Methode, die über einen COM-Clienten aufgerufen wurde, einen SafeArray mit dem F_OWNVALUE-Flag zurückgibt, wird eine Kopie erstellt und diese stattdessen zurückgegeben, da das originale SafeArray automatisch zerstört wird.

Siehe auch

ComObjType(), ComObjValue(), ComObjActive(), ComObjFlags(), Array Manipulation Functions (MSDN)

Beispiele

#1: 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

#2: Mehrere Dimensionen.

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

; Ermittelt die Anzahl an Dimensionen:
dim := DllCall("oleaut32\SafeArrayGetDim", "ptr", ComObjValue(arr))

; Ermittelt die Grenzen jeder Dimension:
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]