<script src="../static/ga4.js" type="text/javascript"></script> </head> <body> <h1>ComObjArray() <span class="ver">[v1.0.91+]</span></h1> <p>Erstellt ein SafeArray, das für COM verwendet werden kann.</p> <pre class="Syntax">ArrayObj := <span class="func">ComObjArray</span>(VarTyp, Anzahl1 <span class="optional">, Anzahl2, ... Anzahl8</span>)</pre> <h2 id="Parameters">Parameter</h2> <dl> <dt>VarTyp</dt> <dd>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. <p>Eine Liste möglicher Werte finden Sie unter <a href="ComObjType.htm">ComObjType()</a>.</p></dd> <dt>Anzahl<i>N</i></dt> <dd><p>Die Größe jeder Dimension. Es werden Arrays mit bis zu 8 Dimensionen unterstützt.</p></dd> </dl> <h2 id="Return_Value">Rückgabewert</h2> <p>Diese Funktion gibt ein Wrapper-Objekt zurück, das ein neues SafeArray enthält.</p> <h2 id="Methods">Methoden</h2> <p>Array-Wrapper-Objekte unterstützen die folgenden Methoden:</p> <p><code class="Syntax">Array.MaxIndex(n)</code>: Gibt die Obergrenze der <i>n</i>-ten Dimension zurück. Wenn <i>n</i> weggelassen wird, wird standardmäßig 1 verwendet.</p> <p><code class="Syntax">Array.MinIndex(n)</code>: Gibt die Untergrenze der <i>n</i>-ten Dimension zurück. Wenn <i>n</i> weggelassen wird, wird standardmäßig 1 verwendet.</p> <p><code class="Syntax">Array.Clone()</code> <span class="ver">[v1.0.96.00+]</span>: Gibt eine Kopie des Arrays zurück.</p> <p><code class="Syntax">Array._NewEnum()</code> <span class="ver">[v1.0.96.00+]</span>: Wird üblicherweise nicht via Skript aufgerufen; ermöglicht die Nutzung von <a href="For.htm">For-Schleifen</a> mit SafeArrays.</p> <h2 id="General_Remarks">Allgemeine Bemerkungen</h2> <p>Array-Wrapper-Objekte können auch von COM-Methoden und <a href="ComObjActive.htm">ComObjActive()</a> zurückgegeben werden. Skripte können wie folgt prüfen, ob ein Wert ein Array ist:</p> <pre>if ComObjType(<i>obj</i>) &amp; 0x2000 MsgBox % "Array-Subtyp: " . ComObjType(obj) &amp; 0xfff else MsgBox Kein Array.</pre> <p>Es werden Arrays mit bis zu 8 Dimensionen unterstützt.</p> <p><span class="ver">[v1.0.96.00+]</span>: 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 <a href="ComObjFlags.htm">ComObjFlags()</a> entfernt werden.</p> <p><span class="ver">[v1.1.17.00+]</span>: 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.</p> <h2 id="Related">Siehe auch</h2> <p><a href="ComObjType.htm">ComObjType()</a>, <a href="ComObjValue.htm">ComObjValue()</a>, <a href="ComObjActive.htm">ComObjActive()</a>, <a href="ComObjFlags.htm">ComObjFlags()</a>, <a href="https://learn.microsoft.com/previous-versions/windows/desktop/automat/array-manipulation-functions">Array Manipulation Functions (Microsoft Docs)</a></p> <h2 id="Examples">Beispiele</h2> <div class="ex" id="ExBasic"> <p><a class="ex_number" href="#ExBasic"></a> Einfache Verwendung.</p> <pre id="Ex1">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 </pre> </div> <div class="ex" id="ExMultiDims"> <p><a class="ex_number" href="#ExMultiDims"></a> Mehrere Dimensionen.</p> <pre id="Ex2">arr := ComObjArray(VT_VARIANT:=12, 3, 4) <em>; Ruft die Anzahl von Dimensionen ab:</em> dim := DllCall("oleaut32\SafeArrayGetDim", "ptr", ComObjValue(arr)) <em>; Ruft die Grenzen jeder Dimension ab:</em> Loop %dim% dims .= arr.MinIndex(A_Index) " .. " arr.MaxIndex(A_Index) "`n" MsgBox %dims% <em>; Einfache Verwendung:</em> Loop 3 { x := A_Index-1 Loop 4 { y := A_Index-1 arr[x, y] := x * y } } MsgBox % arr[2, 3] </pre> </div> </body> </html>