在C#中捕获本机C ++异常

时间:2012-08-14 08:37:55

标签: c# c++ .net exception

我有一些本机C ++类库,我已经用C ++ .NET编写了这个库,然后我从C#调用它(三层!)。

我可以从C ++ .NET中抛出异常,并愉快地在C#中捕获它们。麻烦的是,我能捕获我的本机C ++异常的唯一方法是捕获System.Exception,这很好但是在从std :: exception到System.Exception的转换中我丢失了大部分关于错误的信息(对于示例错误消息!)。我可以捕获C ++ .NET层中的本机异常并重新抛出.NET异常,但这是一个侵入式解决方案,需要我在每个C ++ .NET方法调用周围放置try-catch块(以捕获本机异常和重新抛出)

是否有替代解决方案可以做到这一点,或者我只是要弄脏手......

1 个答案:

答案 0 :(得分:2)

您将不得不沾沾自喜,但通过创建预处理器宏来封装所有重复的捕获逻辑,您可以大大减少工作量。

我假设您想要捕获几种不同类型的异常,例如MFC CException,std :: exception,以及SEH异常。

可能 也想写你的包装函数来返回HRESULTS并使用SetErrorInfo(即转换为COM错误代码和错误信息) - 你可能会认为这给了一个更简洁的.Net界面,可以很好地转换为.Net异常。这样可以避免使用C ++ .Net层,并允许您使用P / Invoke,以及使其可以从VBA调用。

或者你可能不会......只是指出选项!