का उपयोग कर सी ++ अपवाद को पकड़ने में असमर्थ मेरे पास एक तृतीय-पक्ष लाइब्रेरी है जो कभी-कभी अपवाद फेंकती है। तो मैंने अपने कोड को कोशिश/पकड़ (...) में लपेटने का फैसला किया ताकि मैं अपवाद के बारे में जानकारी लॉग कर सकूं (कोई विशिष्ट विवरण नहीं, बस यह हुआ।)कैच (...)
लेकिन किसी कारण से, कोड अभी भी दुर्घटनाओं। क्लाइंट कंप्यूटर पर, यह कड़ी मेहनत करता है और कैच में अपवाद लॉग करने के लिए कोड (...) कभी निष्पादित नहीं होता है। अगर मैं इसे अपनी डीबग/विकास मशीन पर चलाता हूं तो मुझे पॉपअप मिलता है अगर मैं डीबग करना चाहता हूं। जब मैं ऐसा करता हूं, तो यह 0xC0000005 की रिपोर्ट करता है: उल्लंघन उल्लंघन स्थान XXX का उपयोग करें।
अजीब बात यह है कि तीसरे पक्ष की लाइब्रेरी के पुराने संस्करण के साथ, सटीक वही कोड अपवाद को पकड़ता है, और अपवाद लॉग करने के लिए कोड निष्पादित करता है। (मैं एक ही परिस्थितियों में देख वी.एस. के भीतर इस सत्यापित।)
यहाँ छद्म कोड है कि क्रियान्वित कर रहा है:
तो मैं दो प्रश्न हैं:
वहाँ कुछ परिवर्तन है जिस तरह से तीसरे पक्ष ने पुस्तकालय संकलित किया हो सकता है ताकि मेरा कोड अपवाद को पकड़ने में सक्षम न हो? (हां, एक मौका है कि मैं तीसरे पक्ष को जो भी फिक्स जरूरी कर सकता हूं और मेरे लिए पुन: संकलित कर सकता हूं, अगर मुझे पता है कि उन्हें क्या कहना है।)
मान लीजिए कि मैं इसे ठीक करने के लिए तीसरी पार्टी नहीं प्राप्त कर सकता , इन अपवादों को पकड़ने के लिए मैं क्या कर सकता हूं? मैं लाइनों के साथ सोच रहा हूं ... क्या यह निर्धारित करने के लिए कोई तरीका है कि पॉबजेक्ट को हटा दिया गया था या नहीं?
वाह यह वास्तव में उपयोगी लेख है, और वास्तव में मेरे लिए एक व्यावहारिक समाधान है ... पुरानी पुस्तकालय को वीएस2003 के तहत बनाया जाना था, और नई पुस्तकालय वीएस -2008 के लिए है - महत्वपूर्ण अंतर। W/विकल्प संकलित करने के लिए मेरी लाइब्रेरी सेट करने के बाद "सी ++ अपवाद सक्षम करें: हाँ एसईएच अपवाद (/ ईएचए) के साथ" मेरा कोड अब इस उदाहरण को पकड़ता है। इस कारण से मैं इस प्रतिक्रिया को सही उत्तर दे रहा हूं। मैं कहना चाहता हूं कि कई अन्य उत्तरों वैध उपयोगी जानकारी प्रदान करते हैं, विशेष रूप से "जारी रखने में ज्यादा उपयोग नहीं ..." तो सभी को धन्यवाद! –
सी ++ प्रयास/पकड़ के साथ एसईएच अपवादों को पकड़ना आम तौर पर एक बुरा विचार है। एक कारण है कि एमएस ने अपने नए कंपाइलर्स में डिफ़ॉल्ट रूप से अक्षम क्यों किया। आम तौर पर, आपको उस कंपाइलर विकल्प को सक्षम करने के बजाय एसईएच संरचनाओं (जैसे __try/__ को छोड़कर) का उपयोग करना चाहिए। – jalf
माइकल ब्रै> कोई समस्या नहीं, मुझे लगता है कि यहां बहुत सारे उत्तर हैं जो इस तरह की समस्याओं में मदद करते हैं। मैं अन्य लोगों के लिए भी इस जवाब के तहत उन्हें बनाने के लिए वोट दूंगा। आधा> वास्तव में। लेख में वे यही करते हैं। – Klaim