ฉันกำลังใช้วัตถุ COM (MODI) จากภายในแอปพลิเคชัน. net ของฉัน วิธีการที่ฉันเรียกใช้จะเป็นการ System.AccessViolationException ซึ่งถูกสกัดกั้นโดย Visual Studio สิ่งที่แปลกก็คือฉันมีการโทรของฉันในลอง catch ซึ่งมีตัวจัดการสำหรับ AccessViolationException, COMException และทุกอย่างอื่น แต่เมื่อ Visual Studio (2010) ดัก AccessViolationException ดีบักเกอร์จะแบ่งการเรียกเมธอด (doc.OCR) และถ้าฉันผ่านมันไปยังบรรทัดถัดไปแทนที่จะเข้าสู่ catch catch นอกจากนี้หากฉันเรียกใช้สิ่งนี้นอกสตูดิโอภาพแอปพลิเคชันของฉันขัดข้อง ฉันจะจัดการข้อยกเว้นนี้ที่ถูกส่งออกไปภายในวัตถุ 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
ตัวจัดการ (ชั่วคราว!) เพื่อดักจับข้อยกเว้นทั้งหมดแล้วดูว่าข้อยกเว้นนั้นจริงหรือไม่?