StrPtr

文字列の現在のメモリアドレスを返します。

Address := StrPtr(Value)

パラメータ

Value

型:文字列

戻り値

型:整数

この関数は、Valueの現在のメモリアドレスを返す。

備考

アドレスの寿命と、そのアドレスに対してどの操作が有効かは、Valueがこの関数にどのように渡されたかに依存する。以下のコード例に示すように、3つのケースがある。In all cases, if the string will not be modified, the return value can be passed directly to a DllCall function or SendMessage.

Ptr := StrPtr(MyVar)

ValueMyVarのような変数参照(組み込み変数ではない)の場合、戻り値はその変数の内部文字列バッファのメモリアドレスとなる。VarSetStrCapacity(&MyVar)は、終端のヌル文字を除いたバッファのサイズを文字数で返します。

このアドレスは、変数が解放されるのみか、代入演算子によって再代入されるか、組み込み関数に渡されるまで有効であるとみなされるべきである。ローカル変数は自動的に解放されるため、関数のローカル変数の内容のアドレスは、関数が戻った後は無効となる。

このアドレスは、構造体や他の変数に格納し、DllCallSendMessageに間接的に渡したり、他の方法で使用したりすることができる。

スクリプトは、NumPutDllCall、またはSendMessageにアドレスを渡すことで、間接的に文字列の値を変更することができる。If the length of the string is changed this way, the variable's internal length property must be updated by calling VarSetStrCapacity(&MyVar, -1).

Ptr := StrPtr("literal string")

リテラル文字列のアドレスは、プログラムが終了するまで有効である。スクリプトは文字列を変更しようとしてはならない。このアドレスは、構造体や他の変数に格納し、DllCallSendMessageに間接的に渡したり、他の方法で使用することができる。

SendMessage 0x000C, 0, StrPtr(A_ScriptName " changed this title"),, "A"

一時文字列のアドレスは、式全体または関数呼び出し文の評価が完了するまでのみ有効で、それ以降は使用してはならない。上の例では、アドレスはSendMessageが戻るまで有効である。以下はすべて、一時的な文字列が得られる:

上記で明示的にカバーされていない場合、文字列は一時的なものだと考えて差し支えない。

VarSetStrCapacity, DllCall, SendMessage, Buffer object, NumPut, NumGet