7
在我的C#DLL我有一些這樣的代碼與一些託管DLL互動:IntPtr.ToInt32()和x64系統
IntPtr buffer = ...;
TTPOLYGONHEADER header = (TTPOLYGONHEADER)Marshal.PtrToStructure(
new IntPtr(buffer.ToInt32() + index), typeof(TTPOLYGONHEADER));
用我的DLL中AnyCPU與.NET2編譯時,這一直工作得很好和.Net4在x64系統上安裝Windows 8之前。
使用Windows 8時使用.net4 dll我得到一個OverFlowException(「算術運算導致溢出」)在buffer.ToInt32()調用。
爲IntPtr.ToInt32()MSDN文檔這樣說:
「發生OverflowException:在64位的平臺上,這種情況下的值過大或過小,無法表示爲32位帶符號整數「。
我不知道爲什麼這個問題只出現在Windows 8上,以及修復它的正確方法是什麼。
我應該使用這種方法而不是IntPtr.ToInt32()調用嗎?
internal static long GetPtr(IntPtr ptr)
{
if (IntPtr.Size == 4) // x86
return ptr.ToInt32();
return ptr.ToInt64(); // x64
}
*始終*使用ToInt64()。或投到(長)。 –
非常感謝 – devdept2
Hans Passant,請把它作爲答案。 – Idan