Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Try未捕获DllImport函数中的异常 我从C++项目中调用C++函数:_C#_C++ - Fatal编程技术网

C# Try未捕获DllImport函数中的异常 我从C++项目中调用C++函数:

C# Try未捕获DllImport函数中的异常 我从C++项目中调用C++函数:,c#,c++,C#,C++,然后 try { FillSlist(out slist); } catch { } C++dll受到第三方工具的保护,所以在真正执行FillSlist之前,一些代码正在被执行。当第三方代码被执行,程序停止工作时,会发生一些非常糟糕的事情。“try”既不能隔离问题,也不能执行“AppDomain.CurrentDomain.UnhandledException” 有什么可以帮助隔离C++函数从C调用代码中崩溃吗?< /P> < P>这是CLR 4运行的吗?如果是的话 如果一个异常没有像代码

然后

try
{
  FillSlist(out slist);
}
catch
{
}
C++dll受到第三方工具的保护,所以在真正执行FillSlist之前,一些代码正在被执行。当第三方代码被执行,程序停止工作时,会发生一些非常糟糕的事情。“try”既不能隔离问题,也不能执行“AppDomain.CurrentDomain.UnhandledException”


有什么可以帮助隔离C++函数从C调用代码中崩溃吗?< /P> < P>这是CLR 4运行的吗?如果是的话

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

它之所以这样做是因为存在这些类型的异常—托管代码无法采取任何操作来纠正该问题。唯一可能的解决办法是终止进程

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

更多细节


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

我在WindowsCE下的.NETCompactFramework 3.5上也遇到了同样的问题。你找到了解决方案吗?有什么想法为什么会发生在CLR 3.5?我自己就碰到这个错误:.NET 3.5调用C++ DLL;从DLL引发的异常导致我的C#应用程序意外崩溃。也许我在这里遗漏了一些东西,但您提供的链接似乎只是为.NET4.0提供了一个解决方案。在3.5?@ MAK369中,我能在C++ DLL中防止异常吗?问题是如何解决它。在3.5中,我也碰到了这个问题。你找到解决办法了吗?@Shaul-没有,我还没有找到任何真正的解决办法。我刚刚在本地库中解决了这个bug为什么处理这些异常是个坏主意?在我的例子中,我有多个模块,即使其中一个模块损坏,应该关闭,也可以继续运行。
try
{
  FillSlist(out slist);
}
catch
{
}