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

在C#中捕获本机C异常

发布时间:2020-12-15 17:28:20 所属栏目:百科 来源:网络整理
导读:我有一些本机C类库,我已经用C .NET包装了,然后我从C#调用(三层!). 我可以从C .NET中抛出异常,并愉快地在C#中捕获它们.麻烦的是,我可以捕获我的本机C异常的唯一方法是捕获System.Exception,这很好但是在从std :: exception到System.Exception的转换中我丢失
我有一些本机C类库,我已经用C .NET包装了,然后我从C#调用(三层!).

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

是否有替代解决方案,或者我只是要弄脏手…

解决方法

您将不得不弄脏自己,但是通过创建预处理器宏来封装所有重复的catch逻辑,您可以大大减少工作量.

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

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读