文字列の現在のメモリアドレスを返します。
Address := StrPtr(Value)
型:文字列
型:整数
この関数は、Valueの現在のメモリアドレスを返す。
アドレスの寿命と、そのアドレスに対してどの操作が有効かは、Valueがこの関数にどのように渡されたかに依存する。以下のコード例に示すように、3つのケースがある。どのような場合でも、文字列が変更されない場合は、戻り値を直接 DllCall関数またはSendMessageに渡すことができます。
Ptr := StrPtr(MyVar)
Valueが MyVar
のような変数参照(組み込み変数ではない)の場合、戻り値はその変数の内部文字列バッファのメモリアドレスとなる。VarSetStrCapacity(&MyVar)
は、終端のヌル文字を除いたバッファのサイズを文字数で返します。
このアドレスは、変数が解放されるのみか、代入演算子によって再代入されるか、組み込み関数に渡されるまで有効であるとみなされるべきである。ローカル変数は自動的に解放されるため、関数のローカル変数の内容のアドレスは、関数が戻った後は無効となる。
このアドレスは、構造体や他の変数に格納し、DllCallや SendMessageに間接的に渡したり、他の方法で使用したりすることができる。
スクリプトは、NumPut、DllCall、またはSendMessageにアドレスを渡すことで、間接的に文字列の値を変更することができる。この方法で文字列の長さを変更する場合は、VarSetStrCapacity(&MyVar, -1)
を呼び出して、変数内部の長さプロパティを更新する必要があります。
Ptr := StrPtr("literal string")
リテラル文字列のアドレスは、プログラムが終了するまで有効である。スクリプトは文字列を変更しようとしてはならない。このアドレスは、構造体や他の変数に格納し、DllCallや SendMessageに間接的に渡したり、他の方法で使用することができる。
SendMessage 0x000C, 0, StrPtr(A_ScriptName " changed this title"),, "A"
一時文字列のアドレスは、式全体または関数呼び出し文の評価が完了するまでのみ有効で、それ以降は使用してはならない。上の例では、アドレスはSendMessageが戻るまで有効である。以下はすべて、一時的な文字列が得られる:
上記で明示的にカバーされていない場合、文字列は一時的なものだと考えて差し支えない。
VarSetStrCapacity、DllCall、SendMessage、Bufferオブジェクト、NumPut、NumGet