StrPut() / StrGet()

提供: AutoHotkey Wiki
移動: 案内検索

実行制御 | GUI表示 | 演算・変数 | メモリ・DLL操作 | 文字列操作 | キーボード | マウス | シェル | ウィンドウ | ウィンドウグループ
ステータスバー | コントロール | サウンド | ファイル | INIファイル | レジストリ | 環境変数 | AutoHotkey | その他 | 設定関係 | オブジェクト

StrPut() / StrGet() [AHK_L 46+][編集]

AHKL 特定アドレスから文字列を変数にコピーまたはその逆を行う。付加機能としてコードページ変換機能も有する。

StrPut(String [, Encoding = None ] )
StrPut(String, Address [, Length] [, Encoding = None ] )
StrGet(Address [, Length] [, Encoding = None ] )

Parameters[編集]

引数名 説明
String 任意の文字列。数値を指定することも可。
Address 文字列を書き込む/読み取る対象とするメモリアドレス。
Length 読み書きする文字数の最大値。ヌル終端が必要な場合はその分も長さに含める。戻り値の項目も参照のこと。
Encoding 任意のエンコーディング("UTF-8" や "UTF-16"、"CP932"など)。
AddressLength が未指定の場合、コードページ値で指定するには接頭辞 "CP" が必須となる。空文字列や"CP0"を指定した場合は、システムデフォルトのANSIコードページが適応される。 コードページ一覧も参照のこと。

Return Value[編集]

どちらの関数でも、不正なパラメタを与えた場合は空文字列を返す。

StrPut は実際に書き込まれた文字数を返す。0の場合はエラーが起きた場合となる。書き込む文字列の長さより Length の方が小さい場合は、関数は失敗し 0を返す。書き込む文字列の長さと Length がちょうど同じ場合は、メモリ上の文字列はヌル終端を持たない。それ以外の場合は、ヌル終端を含めた実際に書き込まれた長さを返す。

StrGet は 必要な変換を行った後の文字列を返す。

Remarks[編集]

Encoding が未指定の場合、コード変換は行われずに文字列はそのまま読み/書きされる。

コードページ間の相互変換が必要な場合、変換元 String のサイズと変換後に必要なバッファサイズとは異なる可能性がある。

Related[編集]

FileEncoding, NumPut(), NumGet(), DllCall(), VarSetCapacity(), スクリプトの互換性, オブジェクト

Example(s)[編集]

Address に続いて LengthEncoding が指定することは可能。しかし、Address の直後の Encoding を数値で指定してはならない。

strA := StrGet(addressA, "cp0")     ; OK
strA := StrGet(addressA, length, 0) ; OK
strA := StrGet(addressA, 0)         ; エラー(長さとコードページの区別が付かない)

StrPut がコールされると、特定のエンコディングに文字列を変換するために必要なバッファサイズを計算し、続いてエンコードを行いバッファに文字列を書き込む。 例として以下のような変数をバッファとして扱う一般的な関数を挙げる:

StrPutVar(string, ByRef var, encoding)
{
    ; Ensure capacity.
    VarSetCapacity( var, StrPut(string, encoding)
        ; StrPut returns char count, but VarSetCapacity needs bytes.
        * ((encoding="utf-16"||encoding="cp1200") ? 2 : 1) )
    ; Copy or convert the string.
    Return StrPut(string, &var, encoding)
}