NumPut

指定されたアドレス+オフセットに、1つ以上の数値をバイナリ形式で格納します。

NumPut Type, Number, Type2, Number2, ... Target , Offset

パラメータ

Type

型:文字列

以下の文字列のいずれか1つ:UInt, UInt64, Int, Int64, Short, UShort, Char, UChar, Double, Float, Ptr or UPtr

すべての整数型、または純粋な整数を渡す場合、符号付き整数を表現するために2の補数を使用するため、符号付きと符号無しは結果に影響しません。

詳しくはDllCallの種類をご覧ください。

Number

型:整数

保存する番号です。

Target

型:オブジェクトまたは整数

Bufferのようなオブジェクトまたはメモリアドレス。

PtrプロパティとSizeプロパティを実装したオブジェクトであれば何でも使用できますが、この関数はネイティブのBufferオブジェクトに最適化されています。これらのプロパティを持つオブジェクトを渡すことで、関数が無効なメモリ位置に書き込まないようにします。そうすると、クラッシュやその他の予測不可能な動作の原因になります。

Offset

型:整数

省略された場合、デフォルトは 0 です。Otherwise, specify an offset in bytes which is added to Target to determine the target address.

戻り値

型:整数

この関数は、最後に書き込まれた項目の右側のアドレスを返します。DllCallで使用する構造体のように、一部のフィールドが設定されていない、連続しない数値列を記述する場合に使用できます。しかし、多くの場合、代わりに複数のTypeNumberのペアを指定する方がシンプルで効率的です。NumPutにアドレスを返すのは、Offsetを更新したBufferのようなオブジェクトを渡すよりも安全性に欠けます。

総論

最初のNumberの後にTypeNumberを任意の回数繰り返すことで、一連のNumberを記述することができます。各数値は、前の数値の次のバイトに、パディングなしで書き込まれます。DllCallで使用する構造体を作成する場合、データ配列の要件により、フィールドによっては明示的にパディングを追加する必要があることに留意してください。

整数が大きすぎて指定したTypeに収まらない場合、その最上位バイトは無視されます。例えば、NumPut("Char", 257, buf)は数値1を格納する。

ターゲットアドレスが無効な場合、例外が発生することがあります。しかし、無効なアドレスの中には、それを検出できないものもあり、予測できない挙動を引き起こす可能性があります。アドレスの代わりにBufferオブジェクトを渡すことで、ターゲットアドレスが常に検証できるようになります。

NumGet, DllCall, Buffer object, VarSetStrCapacity