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

时间:2015-11-09 15:42:39

标签: c# c++ com com-interop

如果我在C#类中实现一个COM接口,它将从C ++模块调用,那么在发生故障的情况下,C#代码应抛出异常;这将由互操作层编组为HRESULT失败代码。

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

e.g。如果在我的C#代码中我throw new ArgumentException("The email address is invalid")我将除了我的COM HRESULT E_INVALIDARG,但我的自定义文本是否会被编组,或者我只能查找E_INVALIDARG的文字说明?

2 个答案:

答案 0 :(得分:1)

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

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

#import "C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.tlb" raw_interfaces_only

答案 1 :(得分:-1)

这在实现接口ISupportErrorInfo

时通常是可行的