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. Ist n nicht vorhanden, gilt standardmäßig 1.

Array.MinIndex(n): Gibt die Untergrenze der n-ten Dimension zurück. Ist n nicht vorhanden, gilt standardmäßig 1.

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. For-Schleifen können mit SafeArrays verwendet werden.

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 keine Mehrfachreferenzen unterstützen, wird beim Zuweisen eines SafeArrays an ein Element eines anderen SafeArrays eine separate Kopie erstellt. Das geschieht allerdings nur, wenn das Wrapper-Objekt das F_OWNVALUE-Flag hat, welches verantwortlich dafür ist, das Array zu zerstören. Dieses Flag kann mit ComObjFlags entfernt werden.

[v1.1.17.00+]: Wenn eine Funktion oder Methode, aufgerufen von einem COM-Clienten, 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

; Beispiel #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
; Beispiel #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]