大家好我想弄清楚是否有可能捕获(或至少抑制)托管代码中的各种非托管异常?我已经在这里看到了很多问题,但对我来说仍然不清楚,哪些类型的异常是可捕捉的,哪些不是?
就像一个例子,我做了一个C ++程序,它执行除零:
printf("Hello from unmanaged code\n");
int a = 0;
printf("%d\n", 10 / a);
return 0;
和C#应用程序
try
{
Process p = new Process();
p.StartInfo.FileName = "test.exe";
p.Start();
p.WaitForExit();
Console.WriteLine("success");
}
catch (Win32Exception)
{
Console.WriteLine("1");
}
catch(ExternalException)
{
Console.WriteLine("2");
}
catch
{
Console.WriteLine("3");
}
这里没有任何捕获没有触发,程序终止窗口出现,关闭后,C#programm继续正常执行。
答案 0 :(得分:2)
无论使用何种语言或catch-block,都无法处理来自不同进程的异常。
答案 1 :(得分:0)
正如nvoigt所提到的,在这种情况下你无法处理异常。对于这种情况,更合适的解决方案是从C ++代码读取返回的值。例如 : if(a!= 0)返回1; 然后在你的C#代码中处理它,如: if(p.ExitCode == 1)Console.WriteLine("除以零");