猿问

如何处理AccessViolationException

如何处理AccessViolationException

我在.NET应用程序中使用COM对象(Modi)。我所调用的方法抛出一个System.AccessViolationException,该异常被VisualStudio截获。奇怪的是,我已经将调用包装在一个try Catch中,其中包含AccessViolationException、COMException和其他所有处理程序,但是当Visual Studio(2010)拦截AccessViolationException时,调试器就会中断方法调用(doc.OCR),如果我逐步执行,它将继续到下一行,而不是进入CATCH块。此外,如果我在visual studio之外运行这个程序,我的应用程序就会崩溃。如何处理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();}


呼啦一阵风
浏览 1018回答 3
3回答

米脂

在配置文件中添加以下内容,它将被捕获在TRINCATCH块中。警告的话.。尽量避免这种情况,因为这意味着某种违法行为正在发生。<configuration> &nbsp;&nbsp;&nbsp;<runtime> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<legacyCorruptedStateExceptionsPolicy&nbsp;enabled="true"&nbsp;/> &nbsp;&nbsp;&nbsp;</runtime></configuration>
随时随地看视频慕课网APP
我要回答