我有几个项目(托管和非托管),它们运行在32位和64位操作系统上 .Net 4.0很长一段时间。 当我们升级到.Net 4.6(4.0 - > 4.6)并运行此代码时:
Marshal.PtrToStructure(DataInfo, info);
DataInfo = (IntPtr)((int)DataInfo + Internal_Const.DataInfoSize);
我们收到以下错误:
Prof1在OverflowException失败:算术运算导致了 溢出
我们通过强制转换来解决这个问题,即:
Marshal.PtrToStructure(DataInfo, info);
DataInfo = (IntPtr)((long)DataInfo + Internal_Const.DataInfoSize);
所以,我的问题是为什么它有帮助?为什么只有在转移到.Net 4.6后它才会崩溃? 我们的理论是,由于它是一个64位系统,指针可以指向比32位更远的内存,当试图将它转换为int时,它会失败。
但是,我们有许多64位系统运行多年,在转移到.Net 4.6之前它从未失败过。
感谢。