是由通过互操作传递到C++的C#组件引发的异常消息

本文关键字:组件 消息 异常 C++ 互操作 | 更新日期: 2023-09-27 18:21:09

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

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

例如,如果在我的C#代码中我执行throw new ArgumentException("The email address is invalid"),我会将COM HRESULT除外为E_INVALIDARG,但我的自定义文本会被整理吗?或者我只能查找E_INVALIDARG的文本描述吗?

是由通过互操作传递到C++的C#组件引发的异常消息

众所周知,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 时,这通常是可能的