Переход на .Net 4.6 вызвал исключение переполнения

У меня есть несколько проектов (управляемых и неуправляемых), которые работают в 32- и 64-разрядных операционных системах с
.Net 4.0 давно.
Когда мы обновились до .Net 4.6 (4.0 -> 4.6) и запустили этот код:

Marshal.PtrToStructure(DataInfo, info);
DataInfo = (IntPtr)((int)DataInfo + Internal_Const.DataInfoSize);

Мы получили следующую ошибку:

Proj1 терпит неудачу на OverflowException: арифметическая операция привела к
переполнение

мы решили проблему, приведя к длинному, то есть:

Marshal.PtrToStructure(DataInfo, info);
DataInfo = (IntPtr)((long)DataInfo + Internal_Const.DataInfoSize);

Итак, мой вопрос, почему это помогло? и почему рухнул только после перехода на .Net 4.6?
Наша теория состоит в том, что, поскольку это 64-битная система, указатель может указывать на память дальше, чем 32-битная, и при попытке привести ее к int происходит сбой.

Тем не менее, у нас много 64-битных систем, работающих много лет, и это никогда не выходило из строя до перехода на .Net 4.6.

Благодарю.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]