-4

我试图将MaximumApplicationAddressfrom保存SystemInfo到 中uint,但我得到了System Overflow Exception

System.OverflowException:算术运算导致溢出

我尝试了很多,也搜索了很多,但没有任何帮助。如果我转换或使用小数,则没有任何帮助。

这是有问题的代码:

private uint _maxAddress;

public MemorySearch()
{
    SystemInfo info;
    GetSystemInfo(out info);

    // This line throws a System.OverflowException:
    _maxAddress = (uint)info.MaximumApplicationAddress;
    resetFields();
}

完整的源代码在这里

这是错误的屏幕截图:

截屏

有任何想法吗?

4

2 回答 2

1

编译器告诉您 的大小MaximumApplicationAddress大于 a uint

尝试改用long(64 位整数):

private long _maxAddress;

public MemorySearch()
{
    SystemInfo info;
    GetSystemInfo(out info);

    _maxAddress = info.MaximumApplicationAddress.ToInt64();
    resetFields();
}
于 2018-12-28T18:18:07.800 回答
1

没有从IntPtruint( UInt32) 的显式或隐式转换。有一个显式转换为Int32. 请参阅https://docs.microsoft.com/en-us/dotnet/api/system.intptr.op_explicit?view=netframework-4.7.2#System_IntPtr_op_Explicit_System_IntPtr__System_Int32

OverflowException如果您在 64 位系统上调用该函数,则会抛出该函数。

如果您真的想将 64 位指针转换为 32 位值,则必须转换为 a ulong,然后转换为 a uint

于 2018-12-28T18:18:21.500 回答