Sto usando un oggetto COM (MODI) dalla mia applicazione .net. Il metodo che sto chiamando genera un'eccezione System.AccessViolationException, che viene intercettata da Visual Studio. La cosa strana è che ho bloccato la mia chiamata in un try catch, che ha gestori per AccessViolationException, COMException e tutto il resto, ma quando Visual Studio (2010) intercetta l'AccessViolationException, il debugger si interrompe sulla chiamata al metodo (doc.OCR), e se passo attraverso, continua alla riga successiva invece di inserire il blocco catch. Inoltre, se eseguo questo all'esterno dello studio visivo, la mia applicazione si arresta in modo anomalo. Come posso gestire questa eccezione che viene generata all'interno dell'oggetto COM?Come gestire 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();
}
Hai provato a mettere un gestore 'Exception' in (temporaneamente!) Per intercettare tutte le eccezioni e vedere qual è l'eccezione * effettivamente *? – ChrisF
@ChrisF - sì, vedi l'ultimo gestore di catch? Questo dovrebbe catturare tutto, inclusa l'eccezione e qualsiasi sottoclasse di eccezioni. Inoltre, Visual Studio riporta che l'eccezione è System.AccessViolationException – Jeremy
D'oh - mancata, scusa. – ChrisF