迁移到.Net 4.6会导致溢出异常

时间:2016-06-29 13:07:48

标签: c# c++ .net intptr

我有几个项目(托管和非托管),它们运行在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之前它从未失败过。

感谢。

0 个答案:

没有答案