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

C#COMponent引发的异常消息是否通过interop传递给C?

发布时间:2020-12-16 06:50:31 所属栏目:百科 来源:网络整理
导读:如果我在C#类中实现一个COM接口,它将从C模块调用,那么在发生故障的情况下,C#代码应抛出异常;这将由interop层编组为HRESULT故障代码. 但是,传递给Exception构造函数的任何消息文本(或其他信息)是否也可用于调用C代码?如果是这样,如何获得,即哪种API方法? 例
如果我在C#类中实现一个COM接口,它将从C模块调用,那么在发生故障的情况下,C#代码应抛出异常;这将由interop层编组为HRESULT故障代码.

但是,传递给Exception构造函数的任何消息文本(或其他信息)是否也可用于调用C代码?如果是这样,如何获得,即哪种API方法?

例如如果在我的C#代码中我抛出新的ArgumentException(“电子邮件地址无效”)我将除了我的COM HRESULT为E_INVALIDARG但是我的自定义文本将被编组或者我只能查找E_INVALIDARG的文本描述吗?

解决方法

鲜为人知的是,IErrorInfo对象(由 GetErrorInfo返回)也实现了 _Exception COM接口,该接口将 System.Exception类的公共成员公开给非托管代码,包括 StackTrace等.

要从C访问_Exception,您需要导入正确版本的mscorlib.tlb,例如:

#import "C:WindowsMicrosoft.NETFrameworkv4.0.30319mscorlib.tlb" raw_interfaces_only

(编辑:李大同)

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

    推荐文章
      热点阅读