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

Is the exception message raised by a C# COMponent passed through interop to C++?

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

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

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

这在实现接口时通常是可能的ISupportErrorInfo

鲜为人知的是IErrorInfo object (returned by GetErrorInfo) also implements the _Exception COM interface, which exposes the public members of the System.Exception class to unmanaged code, including StackTrace

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

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