"वैश्विक अपवाद हैंडलर" से आपका क्या मतलब है?
32-बिट में विंडोज संरचित अपवाद हैंडलिंग (एसईएच), थ्रेड की अपवाद हैंडलर चेन चलकर एक हैंडलर पाता है जिसमें अपवाद हुआ। अपवाद हैंडलर श्रृंखला रिकॉर्ड की एक लिंक्ड सूची है, जिसका सिर FS:[0]
में पाया जाता है; रिकॉर्ड सामान्य रूप से स्टैक पर आवंटित किए जाते हैं, प्रत्येक try
पर धक्का दिया जाता है और संरक्षित ब्लॉक से बाहर निकलने पर पॉप किया जाता है। प्रत्येक अपवाद रिकॉर्ड द्वारा संदर्भित एक कॉलबैक दिनचर्या है; विंडोज इस खोज चरण के दौरान अपवाद के ब्योरे के साथ इस दिनचर्या को यह निर्धारित करने के लिए कहते हैं कि श्रृंखला का यह "स्तर" अपवाद को "संभाल" देने जा रहा है या नहीं। विंडोज़ फिर अपवाद श्रृंखला को फिर से खोलकर उस बिंदु पर कॉल स्टैक को खोलता है, प्रत्येक कॉलबैक को एक अलग मूल्य के साथ बुलाता है, यह बताते हुए कि अनचाहे चल रहा है, जब तक यह अपवाद को संभालने के लिए चुने गए हैंडलर तक नहीं पहुंच जाता। यदि कोई हैंडलर नहीं मिला है, तो प्रक्रिया को अधिसूचना के बिना, कठिन, समाप्त कर दिया गया है। आम तौर पर ऐसा नहीं होता है; ओएस स्टैक (श्रृंखला में अंतिम तत्व) के तल पर अपने आप के आखिरी मौके हैंडलर स्थापित करता है, और यह आम तौर पर परिचित विंडोज़ को पॉप करता है "इस प्रोग्राम में एक समस्या आई है" संवाद। लेकिन अगर चीजें बहुत भ्रष्ट हो गई हैं, या अपवाद हैंडलर श्रृंखला को हटाने के लिए चारों ओर गड़बड़ कर दी गई है, तो प्रक्रिया मुश्किल हो जाती है।
तो विंडोज अपवाद हैंडलिंग के इस संक्षिप्त अवलोकन से, यह स्पष्ट होना चाहिए कि कोई भी "ग्लोबल" हैंडलर नहीं है, केवल हैंडलर की एक सूची है, प्रति थ्रेड की एक सूची (FS
रजिस्टर थ्रेड संदर्भ का हिस्सा है); और "आखिरी मौका" हैंडलर वह है जो ढेर में सबसे पहले स्थापित किया गया है। आपके डीएलएल के अंदर होने वाले अपवाद को पकड़ने का सबसे आसान तरीका है प्रत्येक प्रविष्टि बिंदु पर तुरंत अपवाद हैंडलर स्थापित करना। यह कैसे करें इसे करने के विवरण के लिए मेसन का जवाब देखें (यह try
/except
के साथ है); लेकिन ध्यान रखें कि यदि आपका डीएलएल कहीं और वापस कॉल करता है (उदा। कॉलबैक रूटीन के माध्यम से), तो आप उन अपवादों को पकड़ सकते हैं जो आपके लिए "मतलब" नहीं थे और आपके कोड के कारण नहीं थे। (यह डीएलएल स्तर पर तीसरे पक्ष के कोड के माध्यम से अपवादों की अपेक्षा करने के लिए अपर्याप्त शैली है, लेकिन यह हो सकता है।)
स्रोत
2011-06-06 04:42:41
+1 मुझे लगता है कि आप अपने डीएलएल में सभी प्रविष्टि बिंदुओं के लिए ऐसा करने के लिए मजबूर हैं क्योंकि अपवादों को चाहिए मॉड्यूल सीमाओं में फैलाना नहीं है।प्रवेश बिंदु दिनचर्या के लिए एक आम टेम्पलेट होने के अन्य लाभ भी हैं। उदाहरण के लिए आप सेटलाइन में कॉल जोड़ सकते हैं जो फ़्लोटिंग पॉइंट कंट्रोल शब्द सेट करते हैं और फिर बहाल करते हैं जो अक्सर एक समस्या होती है जब आपका होस्ट ऐप डेल्फी ऐप नहीं होता है। –