Estou usando um objeto COM (MODI) de dentro do meu aplicativo .net. O método que estou chamando lança um System.AccessViolationException, que é interceptado pelo Visual Studio. O estranho é que envolvi minha chamada em uma captura de tentativa, que possui manipuladores para AccessViolationException, COMException e tudo mais, mas quando o Visual Studio (2010) intercepta a AccessViolationException, o depurador interrompe a chamada de método (doc.OCR), e se eu avançar, ela continua na próxima linha, em vez de entrar no bloco de captura. Além disso, se eu executar isso fora do visual studio, meu aplicativo trava. Como posso lidar com essa exceção lançada no objeto 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
manipulador (temporariamente!) Para interceptar todas as exceções e ver qual é realmente a exceção ?