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
如果我在 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