J'utilise un objet COM (MODI) depuis mon application .net. La méthode que j'appelle lève une exception System.AccessViolationException, qui est interceptée par Visual Studio. La chose étrange est que j'ai encapsulé mon appel dans un try catch, qui a des gestionnaires pour AccessViolationException, COMException et tout le reste, mais lorsque Visual Studio (2010) intercepte AccessViolationException, le débogueur interrompt l'appel de méthode (doc.OCR), et si je passe à travers, il continue à la ligne suivante au lieu d'entrer dans le bloc catch. De plus, si je l'exécute en dehors du studio visuel, mon application se bloque. Comment puis-je gérer cette exception qui est levée dans l'objet 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
gestionnaire (temporairement!) Pour intercepter toutes les exceptions et voir ce qu'est réellement l'exception ?