Gibt die aktuelle Speicheradresse einer Zeichenkette zurück.
Adresse := StrPtr(Wert)
Typ: Zeichenkette
Typ: Integer
Diese Funktion gibt die aktuelle Speicheradresse von Wert zurück.
Die Lebensdauer einer Adresse und welche Operationen mit ihr möglich sind, hängt davon ab, wie Wert an diese Funktion übergeben wurde. Es gibt drei verschiedene Fälle, die unten als Beispielcode gezeigt werden. In allen Fällen kann, wenn die Zeichenkette nicht geändert wird, der Rückgabewert direkt an eine DllCall-Funktion oder SendMessage übergeben werden.
Ptr := StrPtr(MeineVar)
Wenn Wert eine Variablenreferenz wie MeineVar
ist (und keine interne Variable), ist der Rückgabewert die Speicheradresse des internen Zeichenkettenpuffers der Variable. VarSetStrCapacity(&MeineVar)
gibt die Größe des Pufferspeichers in Zeichen zurück, abzüglich des terminierenden Nullzeichens.
Die Adresse verliert in der Regel erst ihre Gültigkeit, wenn die Variable freigegeben wird oder wenn der Variable ein neuer Wert durch einen beliebigen Zuweisungsoperator oder durch Übergabe an eine interne Funktion zugewiesen wurde. Die Adresse des Inhalts einer lokalen Variable einer Funktion verliert ihre Gültigkeit, wenn die Funktion ihr Ende erreicht hat, da lokale Variablen automatisch freigegeben werden.
Die Adresse kann in einer Struktur oder einer anderen Variable gespeichert, indirekt an DllCall oder SendMessage übergeben oder anderweitig verwendet werden, solange sie wie oben beschrieben gültig ist.
Das Skript kann den Wert der Zeichenkette indirekt ändern, indem es die Adresse an NumPut, DllCall oder SendMessage übergibt. Wenn die Länge der Zeichenkette auf diese Weise geändert wird, muss die interne Length-Eigenschaft der Variable durch Aufruf von VarSetStrCapacity(&MeineVar, -1)
aktualisiert werden.
Ptr := StrPtr("direkt geschriebene Zeichenkette")
Die Adresse einer direkt geschriebenen Zeichenkette verliert ihre Gültigkeit, wenn das Programm beendet wird. Das Skript sollte nicht versuchen, die Zeichenkette zu ändern. Die Adresse kann in einer Struktur oder einer anderen Variable gespeichert, indirekt an DllCall oder SendMessage übergeben oder anderweitig verwendet werden.
SendMessage 0x000C, 0, StrPtr(A_ScriptName " hat diesen Titel geändert"),, "A"
Die Adresse einer temporären Zeichenkette verliert bereits ihre Gültigkeit, wenn die Auswertung des Gesamtausdrucks oder der Funktionsaufrufanweisung abgeschlossen ist; danach darf sie nicht mehr verwendet werden. Im obigen Beispiel ist die Adresse solange gültig, bis SendMessage fertig ist. Folgende Dinge erzeugen temporäre Zeichenketten:
Wenn oben nicht explizit erwähnt, kann davon ausgegangen werden, dass die Zeichenkette temporär ist.
VarSetStrCapacity, DllCall, SendMessage, Buffer-Objekt, NumPut, NumGet