因此,据我所知,我发现的每个 IntPtr 添加的托管示例都是错误的。
例如: http: //www.atalasoft.com/cs/blogs/stevehawley/archive/2006/10/16/10987.aspx
我的想法是,如果 IntPtr 在 32 位系统上位于(或接近)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 添加示例?