<script src="../static/ga4.js" type="text/javascript"></script> </head> <body> <h1>StrPut</h1> <p>Kopiert eine Zeichenkette auf eine Speicheradresse oder in einen Puffer (optional mit Codepage-Umwandlung).</p> <pre class="Syntax"> GeschriebeneBytes := <span class="func">StrPut</span>(Zkette, Ziel <span class="optional">, Länge, Kodierung</span>) GeschriebeneBytes := <span class="func">StrPut</span>(Zkette, Ziel <span class="optional">, Kodierung</span>) NotwPufGröße := <span class="func">StrPut</span>(Zkette <span class="optional">, Kodierung</span>) </pre> <h2 id="Parameters">Parameter</h2> <dl> <dt>Zkette</dt> <dd> <p>Typ: <a href="../Concepts.htm#strings">Zeichenkette</a></p> <p>Eine beliebige Zeichenkette. Wenn eine Zahl angegeben ist, wird diese automatisch in eine Zeichenkette umgewandelt.</p> <p><em>Zkette</em> wird standardmäßig in der <a href="../Concepts.htm#string-encoding">nativen Kodierung</a> vermutet.</p> </dd> <dt>Ziel</dt> <dd> <p>Typ: <a href="../Concepts.htm#objects">Objekt</a> oder <a href="../Concepts.htm#numbers">Integer</a></p> <p>Ein <a href="Buffer.htm">Buffer</a>-ähnliches Objekt oder eine Speicheradresse, in die die Zeichenkette geschrieben werden soll.</p> <p>Es kann ein beliebiges Objekt mit einer <a href="Buffer.htm#Ptr">Ptr</a>- und <a href="Buffer.htm#Size">Size</a>-Eigenschaft verwendet werden, aber diese Funktion ist für das native <a href="Buffer.htm">Buffer</a>-Objekt optimiert. Die Übergabe eines Objekts mit diesen Eigenschaften stellt sicher, dass die Funktion keinen Speicher in einen ungültigen Bereich schreibt, was zu Abstürzen oder anderem unvorhersehbaren Verhalten führen kann.</p> <p class="warning"><strong>Hinweis:</strong> Bei einer Codepage-Umwandlung kann die erforderliche Puffergröße von der Größe der Quellzeichenkette abweichen. Rufen Sie in solchen Fällen StrPut mit zwei Parametern auf, um die erforderliche Größe zu berechnen.</p> </dd> <dt>Länge</dt> <dd> <p>Typ: <a href="../Concepts.htm#numbers">Integer</a></p> <p>Die maximale Anzahl der zu schreibenden <a href="../Concepts.htm#character">Zeichen</a>, einschließlich des <a href="../Concepts.htm#null-termination">Nullterminators</a>, falls erforderlich.</p> <p>Wenn <em>Länge</em> 0 oder kleiner als die voraussichtliche Länge nach der Umwandlung ist (oder kleiner als die Länge der Quellzeichenkette ohne Umwandlung ist), wird eine Ausnahme ausgelöst.</p> <p><em>Länge</em> darf nicht weggelassen werden, wenn <em>Ziel</em> eine reine Speicheradresse ist, es sei denn, es ist bekannt, dass die Puffergröße ausreicht, z.B. wenn der Pufferspeicher auf Basis eines früheren StrPut-Aufrufs mit derselben <em>Zkette</em> und <em>Kodierung</em> reserviert wurde.</p> <p>Wenn <em>Ziel</em> ein Objekt ist, wird die Angabe einer <em>Länge</em>, die die Puffergröße (berechnet aus <code><i>Ziel</i>.Size</code>) überschreitet, als Fehler gewertet, selbst wenn die umgewandelte Zeichenkette in den Pufferspeicher passen würde.</p> <p class="warning"><strong>Hinweis:</strong> Wenn <em>Kodierung</em> angegeben ist, muss <em>Länge</em> die Größe des Pufferspeichers (in Zeichen) sein, <u>nicht</u> die Länge von <em>Zkette</em> oder einer Teilzeichenkette, da die Umwandlung deren Länge erhöhen kann.</p> <p class="warning"><strong>Hinweis:</strong> <em>Länge</em> wird in Zeichen gemessen, während Puffergrößen normalerweise in Bytes gemessen werden, ebenso wie der Rückgabewert von StrPut. Um die Puffergröße in Bytes anzugeben, verwenden Sie ein <a href="Buffer.htm">Buffer</a>-ähnliches Objekt im <em>Ziel</em>-Parameter.</p> </dd> <dt>Kodierung</dt> <dd> <p>Typ: <a href="../Concepts.htm#strings">Zeichenkette</a> oder <a href="../Concepts.htm#numbers">Integer</a></p> <p>Wenn weggelassen, wird die Zeichenkette einfach kopiert oder gemessen, ohne dass eine Umwandlung stattfindet. Andernfalls geben Sie die Zielkodierung an, z.B. <code>"UTF-8"</code>, <code>"UTF-16"</code> oder <code>"CP936"</code>. Für numerische Identifikatoren kann das Präfix "CP" nur im 4-Parameter-Modus weggelassen werden. Geben Sie eine leere Zeichenkette oder <code>"CP0"</code> an, um die Standard-ANSI-Codepage des Systems zu verwenden.</p> </dd> </dl> <h2 id="Return_Value">Rückgabewert</h2> <p>Typ: <a href="../Concepts.htm#numbers">Integer</a></p> <p>Im 4- oder 3-Parameter-Modus gibt diese Funktion die Anzahl der geschriebenen Bytes zurück. Ein Nullterminator wird nur dann geschrieben und zum Rückgabewert hinzugefügt, wenn genügend Platz vorhanden ist, d.h. er wird weggelassen, wenn <em>Länge</em> oder <code><i>Ziel</i>.Size</code> (multipliziert mit der Größe eines Zeichens) exakt mit der Länge der umgewandelten Zeichenkette übereinstimmt.</p> <p>Im 2-Parameter-Modus gibt diese Funktion die erforderliche Puffergröße in Bytes zurück, inklusive Platz für den Nullterminator.</p> <h2 id="Error_Handling">Fehlerbehandlung</h2> <p>Es wird ein <a href="Error.htm#ValueError">ValueError</a> ausgelöst, wenn ungültige Parameter erkannt wurden, z.B. wenn die umgewandelte Zeichenkette länger als <em>Länge</em> oder <code><i>Ziel</i>.Size</code> ist.</p> <p>Es wird ein <a href="Error.htm#OSError">OSError</a> ausgelöst, wenn die Umwandlung nicht durchgeführt werden konnte.</p> <h2 id="Remarks">Bemerkungen</h2> <p>Beachten Sie, dass für den <i>Zkette</i>-Parameter immer die <a href="../Concepts.htm#string-encoding">native Kodierung</a> der aktuellen EXE-Datei von AutoHotkey vermutet wird, während <i>Kodierung</i> die Kodierung der Zeichenkette angibt, die in das angegebene <i>Ziel</i> geschrieben wird. Wenn keine <em>Kodierung</em> angegeben ist, wird die Zeichenkette einfach kopiert oder gemessen, ohne dass eine Umwandlung stattfindet.</p> <h2 id="Related">Siehe auch</h2> <p><a href="../Concepts.htm#string-encoding">Zeichenkettenkodierung</a>, <a href="StrGet.htm">StrGet</a>, <a href="../Compat.htm">Binärkompatibilität</a>, <a href="FileEncoding.htm">FileEncoding</a>, <a href="DllCall.htm">DllCall</a>, <a href="Buffer.htm">Buffer-Objekt</a>, <a href="VarSetStrCapacity.htm">VarSetStrCapacity</a></p> <h2 id="Examples">Beispiele</h2> <div class="ex" id="ExNumEnc"> <p><a class="ex_number" href="#ExNumEnc"></a> <em>Länge</em> oder <em>Kodierung</em> kann direkt nach <em>Ziel</em> anzugeben, aber in diesem Fall muss <em>Kodierung</em> nicht-numerisch sein.</p> <pre> StrPut(Zkette, Adresse, "cp0") <em>; Codepage 0, unbestimmte Puffergröße</em> StrPut(Zkette, Adresse, n, 0) <em>; Maximal n Zeichen, Codepage 0</em> StrPut(Zkette, Adresse, 0) <em>; Nicht unterstützt (maximal 0 Zeichen)</em> </pre> </div> <div class="ex" id="ExEncoding"> <p><a class="ex_number" href="#ExEncoding"></a> StrPut kann einmal aufgerufen werden, um die erforderliche Puffergröße für eine Zeichenkette in einer bestimmten Kodierung zu berechnen, und ein zweites Mal, um die Zeichenkette zu kodieren und in den Pufferspeicher zu schreiben. Um diesen Vorgang zu vereinfachen, können Sie die folgende Funktion nutzen.</p> <pre filename="StrBuf.ahk"><em>; Gibt ein <a href="Buffer.htm">Buffer</a>-Objekt zurück, das die Zeichenkette enthält:</em> StrBuf(Zkette, Kodierung) { <em>; Erforderliche Größe berechnen und Pufferspeicher reservieren.</em> buf := Buffer(StrPut(Zkette, Kodierung)) <em>; Die Zeichenkette kopieren oder umwandeln.</em> StrPut(Zkette, buf, Kodierung) return buf }</pre> </div> </body> </html>