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.
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.
Typ: Integer
Die Größe jeder Dimension. Es werden Arrays mit bis zu 8 Dimensionen unterstützt.
Typ: ComObjArray
Diese Funktion gibt ein Wrapper-Objekt zurück, das ein neues SafeArray enthält.
ComObjArray-Objekte unterstützen die folgenden Methoden:
.MaxIndex(n)
: Gibt die Obergrenze der n-ten Dimension zurück. Wenn n weggelassen wird, wird standardmäßig 1 verwendet..MinIndex(n)
: Gibt die Untergrenze der n-ten Dimension zurück. Wenn n weggelassen wird, wird standardmäßig 1 verwendet..Clone()
: Gibt eine Kopie des Arrays zurück..__Enum()
: Wird üblicherweise nicht via Skript aufgerufen; ermöglicht die Nutzung von For-Schleifen mit SafeArrays.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)
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
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]