如何处理 System.AccessViolationException?

gre*_*eth 5 .net exception-handling c++-cli

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

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

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

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

但异常仍未被捕获:我的程序在进入 catch 块之前就崩溃了。

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

gre*_*eth 4

为了清楚起见,我将Flot2011评论中给出的答案复制/粘贴到此处:

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

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