Używam obiektu COM (MODI) z mojej aplikacji .net. Wywoływana przeze mnie metoda zgłasza wyjątek System.AccessViolationException, który jest przechwytywany przez program Visual Studio. Dziwne jest to, że zawinąłem moje wywołanie w try catch, który ma programy obsługi dla AccessViolationException, COMException i wszystkiego innego, ale kiedy Visual Studio (2010) przechwytuje AccessViolationException, debugger przerywa wywołanie metody (doc.OCR), a jeśli przejdę przez nie, przechodzi do następnej linii zamiast wchodzić do bloku catch. Dodatkowo, jeśli uruchomię to poza Visual Studio, moja aplikacja ulegnie awarii. Jak mogę obsłużyć ten wyjątek, który jest zgłaszany w obiekcie 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
obsługi (tymczasowo!), Aby przechwycić wszystkie wyjątki i zobaczyć, czym właściwie jest wyjątek ?