尝试不会在DllImport函数中捕获异常

Ale*_*lex 9 c# c++

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

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

然后

try
{
  FillSlist(out slist);
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)

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

有什么能帮助隔离C++函数与C#调用代码的崩溃吗?

Jar*_*Par 15

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

如果异常没有在代码中演示的open catch块中被捕获,那是因为CLR认为它是一个损坏的状态异常,并且默认情况下不由用户代码处理.相反,它传播并导致进程终止.

它这样做的原因是这些类型的异常没有动作托管代码可以采取纠正问题的方法.唯一可行的解​​决方案是终止该过程.

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

更多细节

如果没有,那么程序可能只是在本机代码中崩溃,执行从未正确返回到托管代码.