gpt4 book ai didi

c# - Try 不捕获 DllImport 函数中的异常

转载 作者:可可西里 更新时间:2023-11-01 16:31:54 27 4
gpt4 key购买 nike

我从 C# 项目调用 C++ 函数:

[System.Runtime.InteropServices.DllImport("C.dll")]
public static extern int FillSlist(out string slist);

然后

try
{
FillSlist(out slist);
}
catch
{
}

C++ dll 受第三方工具保护,因此在真正执行 FillSlist 之前执行了一些代码。执行此第三方代码时发生了一些非常糟糕的事情,并且程序完全停止工作。 “try”既没有隔离问题,也没有执行“AppDomain.CurrentDomain.UnhandledException”。

有什么可以帮助将 C++ 函数崩溃与 C# 调用代码隔离开来吗?

最佳答案

这是在 CLR 4.0 上运行吗?如果是这样……

如果异常没有像您的代码中所示那样在打开的 catch block 中被捕获,那是因为 CLR 认为它是损坏的状态异常并且默认情况下不由用户代码处理。相反,它向上传播并导致进程终止。

它这样做是出于这些类型的异常的原因,托管代码无法采取任何措施来纠正问题。唯一可能的解决方案是终止进程。

您可以通过向方法添加 HandledCorruptedStateException 属性来覆盖此行为。但总的来说,这是一个坏主意。

更多详情

如果不是,那么程序可能只是在 native 代码中崩溃,并且执行永远不会正确返回到托管代码。

关于c# - Try 不捕获 DllImport 函数中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344087/

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