मेरे पास वीसी ++ में इसके सी ++ इंटरफ़ेस के साथ एक तृतीय पक्ष COM घटक है। मुझे नीचे दिए गए कॉल में एक क्रैश हो रहा है जो मेरे आवेदन को दुर्घटनाग्रस्त कर रहा है। मैं इस फ़ंक्शन से कृपा से कैसे ठीक हो सकता हूं जो वास्तव में मेरे आवेदन का हिस्सा नहीं है?COM त्रुटि से कैसे ठीक से पुनर्प्राप्त करें?
inline _RecordsetPtr IGLibMgr::GetLibInfo (_bstr_t LibPath) {
struct _Recordset * _result = 0;
HRESULT _hr = raw_GetLibInfo(LibPath, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _RecordsetPtr(_result, false);
}
यह अंतिम पंक्ति में दुर्घटनाग्रस्त हो जाता है। मुझे नहीं लगता कि मैं इस कोड को संशोधित कर सकता हूं क्योंकि यह तीसरी पार्टी COM सामान है। मेरे पास वास्तव में कौन से विकल्प हैं? मैं सिर्फ उपयोगकर्ता को संदेश बॉक्स लाना चाहता हूं और शानदार तरीके से लौटना चाहता हूं।
क्या आप * निश्चित * हैं कि यह "क्रैशिंग" नहीं है क्योंकि आप '_com_error 'को पकड़ नहीं रहे हैं और जिसे' FAILED (_hr) 'स्थिति के कारण फेंक दिया जा रहा है? यदि आपने इसे डीबग किया है तो मैं * लगभग * गारंटी देता हूं कि जेनरेट किए गए अपर्याप्तता में थोड़ा सा जलाया जाता है (वह चीज़ जो 'FAILED() 'को गैर-शून्य तक पहुंचने का कारण बनती है) – WhozCraig
मैं COM से परिचित नहीं हूं, क्या मुझे पकड़ने की ज़रूरत है यह पकड़() ब्लॉक के साथ? – zar
हां। सामान्य नियम यह है कि, यदि कोई अपवाद फेंक दिया जा सकता है, तो आपको इसे पकड़ने और इसे संभालने की ज़रूरत है, या *** पता है कि आपका कॉलर ऐसा करेगा। ऐसा लगता है जैसे न तो किया जा रहा है। एमएसवीसी से 'comutil' समर्थन परत काफी मजबूत है; अपने आप में लगभग एक पद्धति। मैंने एक नमूना शामिल किया है कि आप इसे नीचे कैसे संभाल सकते हैं। – WhozCraig