int
32 बिट लंबा है। IntPtr
आपके वास्तुकला के लिए एक सूचक के रूप में लंबे समय तक है। इसलिए, एक सूचक को int
में केवल 32 बिट सिस्टम पर संग्रहीत किया जा सकता है, जबकि यह हमेशाIntPtr
में संग्रहीत किया जा सकता है।
सूचना है कि अपने उदाहरण "एक वापसी मान के रूप में पूर्णांक" करता है नहीं एक int
का उपयोग एक सूचक धारण करने के लिए, लेकिन सिर्फ एक संख्यात्मक मान के लिए। इसका मतलब यह नहीं है कि int
स्वचालित रूप से सही आकार है हालांकि: उस पी/आमंत्रण हस्ताक्षर के लेखक GetForegroundWindow
के लिए प्रलेखन में गए होंगे और देखें कि यह HWND
देता है।
फिर, प्लेटफार्म एसडीके में windef.h
(या this MSDN page) से हम देख सकते हैं कि एक HWND
एक HANDLE
जो एक PVOID
है जो एक सूचक है ... है!
इसलिए, जहाँ तक मैं बता सकता हूँ, कि हस्ताक्षर गलत है, के रूप में GetForegroundWindow
की वापसी मान के आकार वास्तुकला पर निर्भर करता है। इस प्रकार, यह IntPtr
भी होना चाहिए।
अद्यतन:
यह ऊपर से अनुमान लगाया जा सकता है, मुझे लगता है कि यह स्पष्ट रूप से कहना है कि सार्थक है:
- ग़लती से
int
के बजाय कभी नहीं का उपयोग कर IntPtr
में 32-बिट अनुप्रयोगों होगा एक समस्या का कारण बनता है, भले ही वे 64-बिट विंडोज़ पर चलें; चूंकि अधिकांश समय इस समय 32-बिट हैं, इससे आपको ऐसी गलतियों को दूर करने में मदद मिलेगी।
- ग़लती से 64 बिट अनुप्रयोगों में
int
बजाय IntPtr
का उपयोग कर इसकी गारंटी नहीं है समस्याओं का कारण है, क्योंकि यह बहुत संभव है कि व्यवहार में मूल्यों int
के 32 बिट में फिट होगा का सामना करना पड़ा जा रहा है। यह संभावना को कम करता है कि एक गलती एक अनुप्रयोग त्रुटि के रूप में प्रकट होगी।
- एक
int
प्रयोग किया जाता है, जहां एक IntPtr
होना चाहिए:
इसलिए, एक त्रुटि के लिए करने के लिए वास्तव में प्रकट वहाँ तीन शर्तें हैं कि एक ही समय में संतुष्ट हो रहे हैं।
निष्पादन योग्य छवि 64-बिट है।
कुछ PInvoke कॉल द्वारा लौटाया गया मूल्य और int
के रूप में संग्रहीत एक मूल्य 32 बिट्स से बड़ा है।
यदि आप शीर्ष डाउन मेमोरी आवंटन के साथ दौड़ते हैं तो आप स्थिति 3 की गारंटी दे सकते हैं जो –
विकसित करते समय बहुत उपयोगी है आपकी पोस्ट लाइफ सेवर जॉन है। काश मैं इसमें अधिक ध्यान आकर्षित करने के लिए कुछ कर सकता था। मैंने एक घटक के साथ रॉक तल मारा था जो गलत तरीके से व्यवहार कर रहा था और आपकी अंतर्दृष्टि ने मुझे सही रास्ते पर रखा! आपने मेरा दिन बना दिया। नहीं, मेरा सप्ताह। शायद मेरा पूरा महीना कम से कम कहने के लिए। एक बार फिर धन्यवाद! पीएस .: यहां एक उदाहरण है कि int बनाम IntPtr के साथ चीजें दक्षिण में कैसे जा सकती हैं: http://stackoverflow.com/questions/15548016/global-keyboard-hook/36188346#36188346 – xDisruptor