C# · 12月 31, 2021

c# – 尝试在DllImport函数中没有捕获异常

我从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块中,如你的代码所示,这是因为CLR认为它是一个损坏的状态异常,默认情况下不会被用户代码处理.而是传播并导致进程终止.

这是为了这些类型的异常的原因,没有管理代码可以采取的措施来纠正问题.唯一可能的解决方案是终止进程.

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

更多细节

> http://msdn.microsoft.com/en-us/magazine/dd419661.aspx

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