Ich verwende ein COM-Objekt (MODI) in meiner .net-Anwendung. Die von mir aufgerufene Methode löst eine System.AccessViolationException aus, die von Visual Studio abgefangen wird. Das Seltsame ist, dass ich meinen Aufruf in einen Try-Catch eingeschlossen habe, der Handler für AccessViolationException, COMException und alles andere enthält. Wenn Visual Studio (2010) die AccessViolationException abfängt, bricht der Debugger den Methodenaufruf (doc.OCR) ab. und wenn ich durchtrete, geht es weiter zur nächsten Zeile, anstatt den Fangblock zu betreten. Wenn ich dies außerhalb des Visual Studios ausführe, stürzt meine Anwendung ab. Wie kann ich mit dieser Ausnahme umgehen, die im COM-Objekt ausgelöst wird?
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
Handler (vorübergehend!) Einzusetzen, um alle Ausnahmen abzufangen und festzustellen, was die Ausnahme tatsächlich ist?