Tôi đang sử dụng một đối tượng COM (MODI) từ trong ứng dụng .net của mình. Phương thức tôi đang gọi ném System.AccessViolationException, bị Visual Studio chặn lại. Điều kỳ lạ là tôi đã thực hiện cuộc gọi của mình trong một lần thử, có trình xử lý cho AccessViolationException, COMException và mọi thứ khác, nhưng khi Visual Studio (2010) chặn AccessViolationException, trình gỡ lỗi sẽ phá vỡ lệnh gọi phương thức (doc.OCR), và nếu tôi bước qua, nó sẽ tiếp tục đến dòng tiếp theo thay vì vào khối bắt. Ngoài ra, nếu tôi chạy cái này bên ngoài phòng thu trực quan thì ứng dụng của tôi gặp sự cố. Làm cách nào tôi có thể xử lý ngoại lệ này được ném trong đối tượng 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
trình xử lý (tạm thời!) Để bẫy tất cả các ngoại lệ và xem ngoại lệ thực sự là gì?