Saya menggunakan objek COM (MODI) dari dalam aplikasi .net saya. Metode yang saya panggil melempar System.AccessViolationException, yang dicegat oleh Visual Studio. Yang aneh adalah bahwa saya telah membungkus panggilan saya dalam try catch, yang memiliki penangan untuk AccessViolationException, COMException dan yang lainnya, tetapi ketika Visual Studio (2010) mencegat AccessViolationException, debugger istirahat pada pemanggilan metode (doc.OCR), dan jika saya melangkah, itu berlanjut ke baris berikutnya alih-alih memasuki blok tangkap. Selain itu, jika saya menjalankan ini di luar studio visual aplikasi saya macet. Bagaimana saya bisa menangani pengecualian ini yang dilemparkan ke dalam objek 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
penangan (sementara!) Untuk menjebak semua pengecualian dan melihat apa sebenarnya pengecualian itu?