gpt4 book ai didi

c# - 为什么 AccessViolationException 不能被 .NET4.0 捕获

转载 作者:IT老高 更新时间:2023-10-28 12:46:51 28 4
gpt4 key购买 nike

下面的 C# 代码在 .NET4.0 上会崩溃,但在 .NET2.0 上可以正常工作,这真的很有趣。

C# 代码

class Program
{
static void Main(string[] args)
{
try
{
ExceptionTest();
Console.WriteLine("Done!");
}
catch (Exception e)
{
Console.WriteLine("Error !!!");
Console.WriteLine(e.Message);
}
}

[DllImport("badapp")]
private static extern int ExceptionTest();
}

C++ 代码

extern "C" __declspec(dllexport) int ExceptionTest()
{
IUnknown* pUnk = NULL;
pUnk->AddRef();
return 0;
}

如果针对 .NET2.0 编译上述 C# 代码,一切正常。只有针对 .NET4.0 进行编译才会使其在运行时崩溃。

我怀疑自 .NET4.0 以来系统异常捕获机制已更改。有什么想法吗?

最佳答案

是的,它在 .NET 4 中发生了变化。您无法捕获指示损坏状态的异常。这是因为当一个损坏的状态异常被抛出时,几乎不能保证你可以做任何事情。实际上没有理由希望状态已损坏的进程继续执行。

为了与旧代码兼容,您可以通过添加 legacyCorruptedStateExceptionsPolicy 来更改此行为。元素到 app.config。

您也可以根据具体情况使用 HandleProcessCorruptedStateExceptions attribute 标记您想要捕获这些异常的方法。 .

关于c# - 为什么 AccessViolationException 不能被 .NET4.0 捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12581202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com