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

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

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

例如,如果在我的C#代码中我throw new ArgumentException("The email address is invalid")我将除了我的COM HRESULT为E_INVALIDARG但是我的自定义文本将被编组或者我是否只能查找E_INVALIDARG的文本描述?

众所周知, 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 

实现接口ISupportErrorInfo时通常可以这样做