假设我的应用程序由3个组件组成。他们是:
据我所知,从本机c ++库抛出的任何本机异常都将包含在SEHException托管类中。我对后续步骤感兴趣,建议在创建此类异常对象后执行的操作。
我应该在c ++ cli托管库中捕获所有这些可能的异常,然后创建一个适当的托管异常吗?像这样:
void some_managed_action()
{
try
{
native_object->some_native_action();
}
catch (const NativeException& e)
{
// What should I do with exception e and native object? before throwing new managed exception
// Will SEH wrapper automatically delete native exception object
// delete all native objects?
throw gcnew ManagedException(get_message(e));
}
}
这种方法可能存在一些陷阱吗?谢谢你的任何建议。
答案 0 :(得分:1)
使用
try
{
}
catch (Exception ex)
{
// .NET exception
}
catch
{
// native exception
}
处理Exception的catch块捕获所有公共语言 规范(CLS)兼容的例外。但是,它没有抓住 符合非CLS的异常。符合非CLS的例外情况可以是 从本机代码或由生成的托管代码抛出 Microsoft中间语言(MSIL)汇编程序。注意C# 和Visual Basic编译器不允许非CLS兼容的异常 抛出,Visual Basic不会捕获非CLS兼容 例外。如果catch块的意图是处理所有 异常,使用以下常规catch块语法。
C#:catch {}
CA2102: Catch non-CLSCompliant exceptions in general handlers