Я использую COM-объект (MODI) из моего приложения .net. Метод, который я вызываю, вызывает исключение System.AccessViolationException, которое перехватывается Visual Studio. Странно, что я завернул свой вызов в try catch, у которого есть обработчики для AccessViolationException, COMException и всего остального, но когда Visual Studio (2010) перехватывает AccessViolationException, отладчик прерывает вызов метода (doc.OCR), и если я пройду через нее, она продолжит следующую строку вместо входа в блок catch. Кроме того, если я запустил это за пределами визуальной студии, мое приложение выйдет из строя. Как я могу обработать это исключение, которое выбрасывается в COM-объект?Как обращаться с AccessViolationException
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' в (временно!), Чтобы уловить все исключения и посмотреть, что такое исключение * на самом деле *? – ChrisF
@ChrisF - да, см. Последний обработчик улова? Это должно поймать все, включая Exception и любой подкласс Exception. Кроме того, Visual studio сообщает, что исключением является System.AccessViolationException – Jeremy
D'oh - пропустил это, извините. – ChrisF