FW 4.0以降、IntPtr
構造には次のAdd
メソッドがあります。
public static IntPtr Add(
IntPtr pointer,
int offset
)
IntPtr
これは、私たちが持っていた数学に関するすべての質問(1、2、おそらくそれ以上)に対処することになっているので、素晴らしいことです。
しかし、なぜoffset
int
ですか?
そうではないIntPtr
でしょうか?範囲を超える値で64ビットポインタをオフセットすることは容易に想像できint
ます。
たとえば、次のことを考慮してMarshal.OffsetOf
ください。
public static IntPtr OffsetOf(
Type t,
string fieldName
)
IntPtr
構造体メンバーへのオフセットとしてを返します。これは完全に理にかなっています!Add
また、このオフセットを新しい方法で簡単に使用することはできません。にキャストしてから、ループで数回Int64
呼び出す必要があります。Add
IntPtr.Size
また、適切に作成されたアプリケーションとは無関係であるという考えそのものを殺しているようです。オフセットをなどの特定のタイプにキャストするInt64
必要があります。その時点で、サイズの違いの管理を開始する必要があります。そして、128ビットIntPtr
が表示されたときに何が起こるかを想像してください。
ここでの私の質問は、なぜですか?
私は結論を正しているのでしょうか、それとも要点を見逃しているのでしょうか。