Thursday 28 December 2017

Gethrforexception ioexception फेंक कभी नहीं है


मेरे पास अभी मेरे हाथों में कोई IDE नहीं है, लेकिन मैं मानता हूँ कि 180Exception के बाद से जाँच और अनियंत्रित अपवादों का सुपर-क्लास है, यह संकलन करेगा। जैसे एक नालपॉइंटर-अपवाद (जो एक अनियंत्रित अपवाद और अपवाद का उपवर्ग है) मूल रूप से कहीं भी फेंक दिया जा सकता है, इस प्रकार कोड संकलित होगा ndash Christian Apr 21 15 at 14:51 जैसा कि टिप्पणियों में बताया गया है, आप अपने प्रयास ब्लॉक के भीतर कोड द्वारा नहीं छोड़े गए अपवाद को पकड़ सकते हैं। अपना कोड बदलने का प्रयास करें: प्रत्येक विधि द्वारा अपवाद क्या किए जाते हैं यह देखने के लिए हमेशा दस्तावेज़ीकरण देखें। आप चेक किए गए अनदेखा अपवादों के विषय पर भी पढ़ सकते हैं इससे पहले कि आप भविष्य में कोई भ्रम पैदा कर सकते हैं। E: workspacepascal1srcpascal1gtjava टेस्ट 8 में एक अपवाद धागा quotmainquot java. lang. NumberFormatException: इनपुट स्ट्रिंग के लिए: java. lang. NumberFormatException. forInputString (अज्ञात स्रोत) पर java. lang. Integer. parseInt (अज्ञात स्रोत) पर कोटा कोट पर java. lang Test. main (Test. java14) पर इग्जागर. परसेन्ट (अज्ञात स्रोत) ndash user3407967 24 मार्च 14:31 15:31 आपको इसे काम करने के लिए एक और कोशिश-पकड़-ब्लॉक में सब कुछ लपेटो है। लेकिन ईमानदारी से, यह बहुत बदसूरत कोड होगा। मुझे लगता है कि आपको अपवाद से निपटने की बुनियादी अवधारणाओं से अधिक परिचित होना चाहिए, पहले स्थान पर आप जो भी कोशिश कर रहे हैं वह एक दूसरे को फेंकने के लिए एक अपवाद फेंक रहा है। आमतौर पर यह जरूरी नहीं है और अच्छा कोड नहीं ले जाएगा। ndash क्रिश्चियन मार्च 24 14 15: 55 मार्शल। GETHRForException सिर्फ एचटी-से-अप-अपवाद के लिए करता है Let8217s पहले एक छोटे से कोड स्निपेट को देखकर शुरू होता है: यह पूरी तरह ठीक लग रहा है, सही नहीं वास्तव में। यह पता चला है कि इस एपीआई को वास्तव में खराब नाम दिया गया है, और यह वास्तव में अपवाद वस्तु से एचआर को पुनः प्राप्त करने से ज्यादा कुछ नहीं करता है। इस एपीआई का प्रयोग करना गलत तरीके से आपको कुछ अजीब समस्याएं दे सकता है, जैसे कि एक गलत, पुराने अपवाद फेंकना। तो एपीआई वास्तव में आपको HRESULT लौटने के अलावा क्या करता है, यह फ़ंक्शन वर्तमान धागा IErrorInfo ऑब्जेक्ट को अपवाद ऑब्जेक्ट के रूप में सेट करता है। हर धागा में एक एसोसिएटेड IErrorInfo COM ऑब्जेक्ट है, जो शून्य के लिए डिफ़ॉल्ट है। यह IErrorInfo ऑब्जेक्ट अंतिम COM API कॉल से विफलता का प्रतिनिधित्व करता है, जो कि GetLastError () Win32 API, या errno C api की तरह है। IErrorInfo ऑब्जेक्ट से, आप त्रुटि विवरण, सहायता फ़ाइल संदर्भ आदि जैसी अधिक जानकारी प्राप्त कर सकते हैं, जिससे आपको त्रुटि के बारे में अधिक जानकारी मिलती है। IErrorInfo ऑब्जेक्ट अपवाद ऑब्जेक्ट को सेट करके (वास्तव में अपवाद ऑब्जेक्ट के आईईआरआरइन्फो कार्यान्वयन पर सेट है, जिसे सभी प्रबंधित ऑब्जेक्ट्स द्वारा साझा किया जाता है), आप अनिवार्य रूप से आपके कॉम कॉलर्स को बता रहे हैं, एक विफलता है, यह विफलता है, यह अपवाद ऑब्जेक्ट है, और आपको इसके बारे में कुछ करना चाहिए, जो स्पष्ट रूप से एक बुरा विचार है यदि आप केवल मानव संसाधन को पुनः प्राप्त करना चाहते हैं कई मामलों में, यह किसी का ध्यान नहीं जा सकता है, यदि आपका COM कॉलर्रैली IErrorInfo को सही ढंग से संभालता है उद्धरण चिह्नों से, मेरा मतलब है कि वे COM IErrorInfo प्रोटोकॉल का अनुसरण करते हैं, जो मूल रूप से हैं: 1. कॉलर वर्तमान थ्रेड से IErrorInfo का उपयोग करते हुए एक COM इंटरफ़ेस को कॉल करते हैं जो कि स्पष्ट रूप से quotI समर्थन IErrorInfoquot 2. कहते हैं (जो कि COM इंटरफ़ेस लागू करता है) quotI समर्थन IErrorInfoquot, लौटने से पहले IErrorInfo को साफ करना चाहिए। यह GetLastError () errno के समान है, ठीक है अगर यह मामला है, तो गलत तरीके से सेट IErrorInfo को थ्रेड में, आमतौर पर या तो कुछ इंटरफ़ेस कार्यान्वयन द्वारा ओवरराइट किया गया है जो IErrorInfo का समर्थन करता है, या अनदेखा कर दिया गया है। हालांकि, चूंकि मैं वर्णित प्रोटोकॉल वास्तव में हर COM डेवलपर द्वारा बहुत अच्छी तरह से समझ में नहीं आ रहा है, I8217ve अक्सर मामलों को देखा जहां COM घटक सिर्फ quotsure कहता है, मैं हर COM इंटरफ़ेस पर IErrorInfo का समर्थन करता है, और वे don8217t setclear IErrorInfo बिल्कुल भी। और फिर, इस खराब आरोपित कॉम इंटरफ़ेस के कॉल करने वाला, पहले से GetHRForException कॉल द्वारा निर्धारित IErrorInfo का उपयोग करके समाप्त होगा, और यह मानना ​​है कि एक त्रुटि है। उदाहरण के लिए, let8217 में निम्न परिदृश्य पर विचार करें: कुछ COM घटक कोड कोड में कॉल अपवाद फेंक देते हैं, IOException कोड अपवाद फैलता है, और मार्शल को कहता है। GETHRForException, जो इस अपवाद के लिए IErrorInfo सेट करता है IOException कोड को किसी अन्य COM घटक B में कॉल करता है आईबी में। फंक आईबी। फंक विफल हो गया और कुछ मानव संसाधन विफलता कोड वापस लौटा, कहते हैं, ईयूटीएफएमएमआरआई सीएलआर एचआर असफलता कोड को देखता है, और COM घटक बी से पूछता है कि आप IErrorInfoquot का समर्थन करते हैं, और बी जवाबों का जवाब देते हैं, क्यों नहीं, इसके अलावा, notn8217t वास्तव में इसका समर्थन करता है और यह doesn8217t setclear IErrorInfo CLR को IErrorInfo पुनर्प्राप्त करता है, और देखता है कि यह वास्तव में एक प्रबंधित अपवाद है, और OutOfMemoryException के बजाय IOException अपवाद को बाहर निकालता है। अब, आपको आश्चर्य हो सकता है: यह एपीआई वास्तव में पहली जगह के लिए क्या करना है वास्तव में इसका उपयोग COM इंटरॉप में किया जाता है, जहां आप HRESULT को वापस करना चाहते हैं और अपने द्वारा IErrorInfo सेट करना चाहते हैं। यह बहुत अधिक बार होता है 8211 अधिकांश लोग पर्याप्त रूप से खुश हो सकते हैं कि COM इंटरॉप अपवाद को एचआर और आईईआरआरएन्फ़ोन्फ़ (जो मार्शल को कॉल करने के लिए होता है। GETHRForException) करके उस हिस्से की देखभाल करता है। इसलिए जब तक आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं, मेरी सलाह है कि मार्शल से दूर रहें। GetHRForException यदि आप वास्तव में, वास्तव में केवल एक विशिष्ट अपवाद के लिए HRESULT प्राप्त करना चाहते हैं, तो आपको अपवाद का उपयोग करना चाहिए। HRsult संपत्ति

No comments:

Post a Comment