यदि कोई Windows रनटाइम प्रकार COM त्रुटि उठाता है .NET लगता है कि यह त्रुटि अक्सर (या हमेशा?) को Exception
उदाहरण में लपेटती है। त्रुटि संदेश में COM HRESULT त्रुटि कोड शामिल है। नई क्रिप्टोग्राफिक संदेश के साथ एक Exception
में एक गलत बफर लंबाई परिणाम उदाहरण के लिए एईएस सीबीसी के साथ API का उपयोग करने "की आपूर्ति की उपयोगकर्ता बफर अनुरोध किया गया कार्य के लिए मान्य नहीं है। (Exception from HRESULT: 0x800706F8
)"।WinRT अपवादों को कैसे संभालें जिससे अपवाद होता है?
ठीक है, हम कैसे उन अपवादों को संभालने के लिए चाहिए? क्या हमें अपवाद से HRESULT
कोड पढ़ना चाहिए ताकि यह पता चल सके कि किस प्रकार का अपवाद था? क्लासिक .NET में मुझे CryptographicException
मिलेगा जो कि मैं अन्य त्रुटियों से क्रिप्टोग्राफिक त्रुटियों को अलग करने के लिए उपयोग कर सकता हूं।
एक और बात यह है कि मुझे समझ नहीं आता माइक्रोसॉफ्ट कोड गुणवत्ता नियम कहते हैं कि यह है कि एक होना चाहिए है कभी नहीं फेंक अपवाद लेकिन हमेशा व्युत्पन्न प्रकार के। इसका कारण यह है कि किसी को भी सामान्य Exception
को पकड़ने के लिए मजबूर होना चाहिए जो OutOfMemoryException
जैसे अधिक घातक अपवादों को पकड़ता है। एक और नियम कहता है कि किसी को पुस्तकालयों में कभी भी Exceptio
एन पकड़ना नहीं चाहिए। अगर हम विंडोज स्टोर ऐप या विनआरटी पुस्तकालयों में Exception
पकड़ने के लिए मजबूर हैं तो हम इन नीतियों का पालन कैसे कर सकते हैं?
वैसे: Clemens Vasters shows in his blog how we can catch Exception while avoiding to catch fatal exception। मुझे लगता है कि Exception
पकड़ना अब खराब कोड नहीं है।
जुड़ा हुआ ब्लॉग प्रविष्टि के संबंध में, सूचीबद्ध "घातक" अपवाद के कई प्रबंधित कोड द्वारा पकड़ा नहीं जा सकता है। विशेष रूप से, 'स्टैक ओवरफ्लो एक्सेप्शन', हालांकि मैं काफी हद तक निश्चित हूं कि एवी को या तो पकड़ा नहीं जा सकता है (दोनों को देशी कोड में पकड़ा जा सकता है, लेकिन ऐसा करना खतरनाक है)। ध्यान दें कि कुछ अपवाद जो _appear_ घातक वास्तव में ऐसा नहीं हो सकता है। उदाहरण के लिए, कई COM घटक 'E_OUTOFMEMORY' लौटाते हैं जब किसी विशेष बफर में स्थान समाप्त हो जाती है। इस HRESULT को आउटऑफमेमरी अपवाद के रूप में अनुवादित किया जाएगा, लेकिन इसका मतलब यह नहीं है कि प्रक्रिया ने अपनी संपूर्ण पता स्थान समाप्त कर दी है। –