Erstellt ein SafeArray, das für COM verwendet werden kann.
ArrayObj := ComObjArray(VarTyp, Anzahl1 , Anzahl2, ... Anzahl8)
Eine Liste möglicher Werte finden Sie unter ComObjType().
Die Größe jeder Dimension. Es werden Arrays mit bis zu 8 Dimensionen unterstützt.
Diese Funktion gibt ein Wrapper-Objekt zurück, das ein neues SafeArray enthält.
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.
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)
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
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]