StrPut() [AHK_L 46+]

Kopiert eine Zeichenkette auf eine Speicheradresse (optional mit Codepage-Umwandlung).

ZeichenAnzahl := StrPut(Zkette, Ziel , Länge, Kodierung)
ZeichenAnzahl := StrPut(Zkette, Ziel , Kodierung)
NotwPufGröße  := StrPut(Zkette , Kodierung)

Parameter

Zkette

Eine beliebige Zeichenkette. Wenn eine Zahl angegeben ist, wird diese automatisch in eine Zeichenkette umgewandelt.

Zkette wird standardmäßig in der nativen Kodierung vermutet.

Ziel

Die Speicheradresse, wohin die Zeichenkette geschrieben werden soll.

Hinweis: 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.

Länge

Die maximale Anzahl der zu schreibenden Zeichen, einschließlich des Nullterminators, falls erforderlich.

Wenn Länge 0 oder kleiner als die voraussichtliche Länge nach der Umwandlung ist (oder kleiner als die Länge der Quellzeichenkette ohne Umwandlung ist), werden keine Zeichen geschrieben.

Länge kann weggelassen werden, wenn bekannt ist, dass die Puffergröße ausreicht, z.B. wenn der Pufferspeicher auf Basis eines früheren StrPut-Aufrufs mit derselben Zkette und Kodierung reserviert wurde.

Hinweis: Wenn Kodierung angegeben ist, muss Länge die Größe des Pufferspeichers (in Zeichen) sein, nicht die Länge von Zkette oder einer Teilzeichenkette, da die Umwandlung deren Länge erhöhen kann.

Hinweis: Länge und der Rückgabewert von StrPut werden in Zeichen gemessen, während Puffergrößen normalerweise in Bytes gemessen werden.

Kodierung

Wenn weggelassen, wird die Zeichenkette einfach kopiert oder gemessen, ohne dass eine Umwandlung stattfindet. Andernfalls geben Sie die Zielkodierung an, z.B. "UTF-8", "UTF-16" oder "CP936". Für numerische Identifikatoren kann das Präfix "CP" nur im 4-Parameter-Modus weggelassen werden. Geben Sie eine leere Zeichenkette oder "CP0" an, um die Standard-ANSI-Codepage des Systems zu verwenden.

Rückgabewert

Im 4- oder 3-Parameter-Modus gibt diese Funktion die Anzahl der geschriebenen Zeichen zurück. Im 2-Parameter-Modus gibt sie die erforderliche Puffergröße in Zeichen zurück. Wenn Länge genau die Länge der umgewandelten Zeichenkette ist, ist die Zeichenkette nicht nullterminiert, andernfalls wird der Nullterminator zur zurückgegebenen Größe hinzugezählt.

Fehlerbehandlung

Es wird eine leere Zeichenkette zurückgegeben, wenn ungültige Parameter erkannt werden oder die Umwandlung nicht durchgeführt werden kann. Wenn die endgültige Zeichenanzahl Länge überschreitet, wird 0 zurückgegeben.

Bemerkungen

Beachten Sie, dass für den Zkette-Parameter immer die native Kodierung der aktuellen EXE-Datei von AutoHotkey vermutet wird, während Kodierung die Kodierung der Zeichenkette angibt, die in das angegebene Ziel geschrieben wird. Wenn keine Kodierung angegeben ist, wird die Zeichenkette einfach kopiert oder gemessen, ohne dass eine Umwandlung stattfindet.

Zeichenkettenkodierung, StrGet(), Skriptkompatibilität, FileEncoding, DllCall(), VarSetCapacity()

Beispiele

Länge oder Kodierung kann direkt nach Ziel anzugeben, aber in diesem Fall muss Kodierung nicht-numerisch sein.

StrPut(Zkette, Adresse, "cp0")  ; Codepage 0, unbestimmte Puffergröße
StrPut(Zkette, Adresse, n, 0)   ; Maximal n Zeichen, Codepage 0
StrPut(Zkette, Adresse, 0)      ; Nicht unterstützt (maximal 0 Zeichen)

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 in Ihre Bibliothek aufnehmen.

StrPutVar(Zkette, ByRef Var, Kodierung)
{
    ; Kapazität bereitstellen.
    VarSetCapacity(Var, StrPut(Zkette, Kodierung)
        ; StrPut gibt Zeichenanzahl zurück, aber VarSetCapacity benötigt Bytes.
        * ((Kodierung = "utf-16" || Kodierung = "cp1200") ? 2 : 1) )
    ; Die Zeichenkette kopieren oder umwandeln.
    return StrPut(Zkette, &Var, Kodierung)
}