Sto usando un oggetto COM (MODI) dalla mia applicazione .net. Il metodo che sto chiamando genera System.AccessViolationException, che viene intercettato da Visual Studio. La cosa strana è che ho racchiuso la mia chiamata in un tentativo catch, che ha gestori per AccessViolationException, COMException e tutto il resto, ma quando Visual Studio (2010) intercetta AccessViolationException, il debugger si interrompe sulla chiamata del metodo (doc.OCR), e se passo attraverso, continua alla riga successiva invece di entrare nel blocco catch. Inoltre, se eseguo questo al di fuori di Visual Studio, la mia applicazione si arresta in modo anomalo. Come posso gestire questa eccezione che viene generata all'interno dell'oggetto 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
gestore (temporaneamente!) Per intercettare tutte le eccezioni e vedere qual è effettivamente l'eccezione ?