Estoy usando un objeto COM (MODI) desde dentro de mi aplicación .net. El método que estoy llamando arroja System.AccessViolationException, que es interceptado por Visual Studio. Lo curioso es que he cerrado mi llamada en una captura de prueba, que tiene controladores para AccessViolationException, COMException y todo lo demás, pero cuando Visual Studio (2010) intercepta AccessViolationException, el depurador se rompe en la llamada al método (doc.OCR), y si paso, continúa a la siguiente línea en lugar de ingresar al bloque catch. Además, si ejecuto esto fuera del estudio visual mi aplicación se bloquea. ¿Cómo puedo manejar esta excepción que se lanza dentro del objeto COM?Cómo manejar 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();
}
¿Ha intentado poner un controlador 'Exception' (temporalmente) para atrapar todas las excepciones y ver cuál es la excepción * en realidad *? – ChrisF
@ChrisF: sí, ¿ves el último controlador de catch? Eso debería atrapar todo, incluida la excepción y cualquier subclase de excepción. Además, Visual Studio informa que la excepción es System.AccessViolationException – Jeremy
D'oh - se perdió eso, lo siento. – ChrisF