尝试不会在DllImport函数中捕获exception

我从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上运行吗? 如果是这样 …

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

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

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

更多细节

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