Вызываю Marshal.AllocHGlobal(112) возвращается указатель на кусок памяти размером 2137607699712 байт.
Такая ситуация обнаружена только на Windows10 и Win2012 Server R2 (x64), на других ОС работает нормально.
Как победить данную проблему?
Re: Метод Marshal.AllocHGlobal(Int32) неправильно работает
Здравствуйте, Slider_spb, Вы писали:
S_>Вызываю Marshal.AllocHGlobal(112) возвращается указатель на кусок памяти размером 2137607699712 байт. S_>Такая ситуация обнаружена только на Windows10 и Win2012 Server R2 (x64), на других ОС работает нормально. S_>Как победить данную проблему?
А разве этот метод возвращает указатель? По идее он должен соответствовать GlobalAlloc.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[2]: Метод Marshal.AllocHGlobal(Int32) неправильно работает
Здравствуйте, VTT, Вы писали:
VTT>Здравствуйте, Slider_spb, Вы писали:
S_>>Вызываю Marshal.AllocHGlobal(112) возвращается указатель на кусок памяти размером 2137607699712 байт. S_>>Такая ситуация обнаружена только на Windows10 и Win2012 Server R2 (x64), на других ОС работает нормально. S_>>Как победить данную проблему? VTT>А разве этот метод возвращает указатель? По идее он должен соответствовать GlobalAlloc.
IntPtr возвращает в описании https://msdn.microsoft.com/ru-ru/library/s69bkh17(v=vs.110).aspx и в коде...
Re[3]: Метод Marshal.AllocHGlobal(Int32) неправильно работает
Здравствуйте, Slider_spb, Вы писали:
S_>Здравствуйте, VTT, Вы писали:
VTT>>Здравствуйте, Slider_spb, Вы писали:
S_>>>Вызываю Marshal.AllocHGlobal(112) возвращается указатель на кусок памяти размером 2137607699712 байт. S_>>>Такая ситуация обнаружена только на Windows10 и Win2012 Server R2 (x64), на других ОС работает нормально. S_>>>Как победить данную проблему? VTT>>А разве этот метод возвращает указатель? По идее он должен соответствовать GlobalAlloc. S_>IntPtr возвращает в описании https://msdn.microsoft.com/ru-ru/library/s69bkh17(v=vs.110).aspx и в коде...
Да, но смысл в том, что возвращаемый GlobalAlloc указатель на самом деле дескриптор, и для получения реального указателя из него надо вызывать GlobalLock (который может ничего и не далать).
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re: Метод Marshal.AllocHGlobal(Int32) неправильно работает
Здравствуйте, VTT, Вы писали:
VTT>Да, но смысл в том, что возвращаемый GlobalAlloc указатель на самом деле дескриптор, и для получения реального указателя из него надо вызывать GlobalLock (который может ничего и не далать).
В Win API, да, но здесь не надо
When AllocHGlobal calls LocalAlloc, it passes a LMEM_FIXED flag, which causes the allocated memory to be locked in place.