मैं अपने .net अनुप्रयोग से COM ऑब्जेक्ट (MODI) का उपयोग कर रहा हूं। मैं जिस पद्धति को कॉल कर रहा हूं वह एक System.AccessViolationException है, जो विज़ुअल स्टूडियो द्वारा इंटरसेप्ट की गई है। विचित्र बात यह है कि मैंने अपने कॉल को एक कोशिश के कैच में लपेटा है, जिसमें AccessViolationException, COMException और अन्य सभी चीज़ों के लिए हैंडलर हैं, लेकिन जब Visual Studio (2010) AccessViolationException को स्वीकार करता है, तो डिबगर विधि कॉल (doc.OCR) पर टूट जाता है, और अगर मैं आगे बढ़ता हूं, तो यह कैच ब्लॉक में प्रवेश करने के बजाय अगली पंक्ति तक जारी रहता है। इसके अतिरिक्त, अगर मैं इसे दृश्य स्टूडियो के बाहर चलाता हूं तो मेरा एप्लिकेशन क्रैश हो जाता है। मैं COM ऑब्जेक्ट के भीतर फेंके गए इस अपवाद को कैसे संभाल सकता हूं?
MODI.Document doc = new MODI.Document();
try
{
doc.Create(sFileName);
try
{
doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);
sText = doc.Images[0].Layout.Text;
}
catch (System.AccessViolationException ex)
{
//MODI seems to get access violations for some reason, but is still able to return the OCR text.
sText = doc.Images[0].Layout.Text;
}
catch (System.Runtime.InteropServices.COMException ex)
{
//if no text exists, the engine throws an exception.
sText = "";
}
catch
{
sText = "";
}
if (sText != null)
{
sText = sText.Trim();
}
}
finally
{
doc.Close(false);
//Cleanup routine, this is how we are able to delete files used by MODI.
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(doc);
doc = null;
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
Exception
सभी अपवादों को फंसाने के लिए (अस्थायी रूप से!) एक हैंडलर लगाने की कोशिश की है और देखें कि वास्तव में अपवाद क्या है?