したがって、私が知る限り、私が見つけた IntPtr 追加の管理された例はすべてWRONGです。
例: http://www.atalasoft.com/cs/blogs/stevehawley/archive/2006/10/16/10987.aspx
私の考えでは、32 ビット システムで IntPtr が int32.MaxValue に (またはその近くに) あり、int32 をオーバーフローするオフセットを追加した場合、それはまだ有効なメモリ アドレスではありません (uint32 で有効であるため、 IntPtr では負の数で表されます)?!
コードは次のようにする必要があると思います。
public static IntPtr Offset(IntPtr src, int offset)
{
switch (IntPtr.Size) {
case 4:
return new IntPtr((int)((uint)src + offset));
case 8:
return new IntPtr((long)((ulong)src + offset));
default:
throw new NotSupportedException("Not supported");
}
}
私はクレイジーですか?
誰もが実証済みの真の IntPtr 追加の例を持っていますか?