加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:48:38 所属栏目:百科 来源:网络整理
导读:我从C#项目调用C函数: [System.Runtime.InteropServices.DllImport("C.dll")]public static extern int FillSlist(out string slist); 接着 try{ FillSlist(out slist);}catch{} C dll受到第三方工具的保护,所以一些代码正在FillSlist被执行之前执行.当第三
我从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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读