2010-07-05 7 views
9

मेरे पास सी ++ कोड है जो कुछ सी पुस्तकालयों का उपयोग करता है। सी पुस्तकालय सी भाषा कॉलबैक लेते हैं। मैंने अपने सी ++ कोड में एक कॉलबैक लिखा और अब मुझे किसी भी तरह से त्रुटि की रिपोर्ट करने की आवश्यकता है (लेकिन यह शून्य हो जाता है)। मुझे आश्चर्य है कि क्या मैं सी ++ कोड से उपयोग किए जाने वाले सी कॉलबैक से अपवाद फेंक सकता हूं?क्या मैं विरासत सी कॉलबैक से सी ++ अपवाद फेंक सकता हूं?

मेरे लिए यह समझना बहुत मुश्किल है।

धन्यवाद, बोडा साइडो।

उत्तर

9

हां, आपको ऐसा करने में सक्षम होना चाहिए। हालांकि, ध्यान रखें कि यह पूरी तरह से संभावना है कि सी पुस्तकालय अपवाद सुरक्षित नहीं लिखा गया था, और नतीजतन आप कुछ असंगत स्थिति में उस पुस्तकालय की कुछ संरचनाओं को छोड़ सकते हैं। यह पूरी तरह से विशिष्ट पुस्तकालय और विशिष्ट कॉलबैक फ़ंक्शन पर निर्भर करता है। यदि कुछ और नहीं है, तो उस लाइब्रेरी को उस कॉलबैक के संबंध में शुरुआत से ही सी ++ समर्थन के साथ लिखा जाना होगा।

+1

+1 अच्छा बिंदु, सी लाइब्रेरी कॉलबैक फ़ंक्शन को कॉल करने से पहले स्मृति को आवंटित कर सकता है, फ़ाइल या नेटवर्क कनेक्शन खोल सकता है। यदि आप वहां अपवाद फेंकते हैं, तो लाइब्रेरी बाद में साफ़ नहीं होती है। – Ozan

+0

सुझावों के लिए धन्यवाद। मैंने इसे एक वैश्विक चर का उपयोग किया जो त्रुटि होने पर सेट हो जाता है। इस सी कॉलबैक फ़ंक्शन के बाद की सभी कॉलें तो बस वापस आएं और कुछ भी नहीं करें। पुस्तकालय के बाद सभी सी कॉल के साथ किया जाता है, और मैं अपने सी ++ कोड पर वापस आ जाता हूं, मैं जांचता हूं कि यह वैश्विक चर सेट किया गया था, और यदि यह था, तो मैं त्रुटि की रिपोर्ट करता हूं। – bodacydo

+2

आपके पहले दो कथन पारस्परिक रूप से विरोधाभासी हैं। "हाँ, आपको ऐसा करने में सक्षम होना चाहिए।" - ठीक अच्छा। "हालांकि, ध्यान रखें कि यह पूरी तरह से संभावना है कि सी पुस्तकालय अपवाद सुरक्षित नहीं लिखा गया था," - ओह, तो जवाब वास्तव में नहीं है। कभी भी कोड में अपवाद फेंक न दें जो अपवाद सुरक्षित नहीं है। – JeremyP

1

हां, आप अपने सी ++ फ़ंक्शन से अपवाद फेंक सकते हैं। हालांकि, इसे केवल सी ++ कोड द्वारा पकड़ा जा सकता है, इसलिए इसे विरासत पुस्तकालय में नहीं संभाला जाएगा।

+0

क्या आप "सी सी फंक्शन" कहने का मतलब था? – egrunin

+0

नहीं। यदि आप अपवाद फेंकते हैं, तो फ़ंक्शन सी नहीं है, है ना? – Anthony

+0

अच्छा बिंदु। क्या यह सी कॉलबैक है या सी ++ कॉलबैक अगर मैं इसे फेंक देता हूं? – bodacydo

संबंधित मुद्दे