如何处理System.AccessViolationException?

时间:2012-02-29 13:20:15

标签: .net exception-handling c++-cli

我在用C ++ / CLI编写的程序中使用外部C库和.NET框架4.有时lib崩溃了,我收到了消息:

  

未处理的异常:System.AccessViolationException:尝试读取或写入受保护的内存。

所以我尝试使用try / catch块来处理它:

try
{
  Init(); //< lib call which sometimes crashes
}
catch (Exception^ e)
{
  // handle the error
}

但是异常仍然没有被捕获:我的程序在进入catch块之前崩溃了。

如何处理此异常以防止程序崩溃?

1 个答案:

答案 0 :(得分:3)

为清楚起见,我在the answer处的评论中复制/粘贴Flot2011

  

有几种方法可以解决这个问题:

     
      
  • 重新编译为.NET 3.5程序集并在.NET 4.0中运行。
  •   
  • 在配置/运行时元素下的应用程序配置文件中添加一行:<legacyCorruptedStateExceptionsPolicy enabled="true|false"/>
  •   
  • 使用HandleProcessCorruptedStateExceptions属性装饰要捕获这些异常的方法。有关详细信息,请参阅this article
  •