मेरी सी # dll में मैं कुछ अप्रबंधित DLLs के साथ बातचीत करने के लिए इस तरह कुछ कोड है और विंडोज 8 स्थापित करने से पहले x64 सिस्टम पर .Net4।IntPtr.ToInt32() और 64 प्रणालियों
विंडोज 8 के साथ .Net4 dll का उपयोग करते समय मुझे एक ओवरफ्लोएक्सप्शन ("अंकगणितीय ऑपरेशन का परिणाम ओवरफ़्लो" मिलता है) बफर पर। ToInt32() कॉल।
IntPtr.ToInt32() के लिए MSDN प्रलेखीकरण इस कहते हैं:
"OverflowException: 64-बिट मंच पर, इस उदाहरण का मूल्य बहुत बड़ी या बहुत एक 32-बिट पर हस्ताक्षर किए पूर्णांक के रूप में प्रतिनिधित्व करने के लिए छोटा है । "
मुझे आश्चर्य है कि यह समस्या केवल विंडोज 8 के साथ क्यों सामने आई है, और इसे ठीक करने का सही तरीका क्या है।
क्या मुझे IntPtr.ToInt32() कॉल के बजाय इस तरह की विधि का उपयोग करना चाहिए?
internal static long GetPtr(IntPtr ptr)
{
if (IntPtr.Size == 4) // x86
return ptr.ToInt32();
return ptr.ToInt64(); // x64
}
* हमेशा * का उपयोग ToInt64()
IntPtr.Add(buffer, index)
के दोनों या है। या (लंबे) तक कास्ट किया। –
आपको बहुत धन्यवाद – devdept2
हंस पासेंट, कृपया इसे उत्तर के रूप में पोस्ट करें। – Idan