C++ 从C+;中的HRESULT检索错误消息+;调用C#COM对象后

C++ 从C+;中的HRESULT检索错误消息+;调用C#COM对象后,c++,com,hresult,extract-error-message,C++,Com,Hresult,Extract Error Message,我有一个用C#编写的COM对象。在某些情况下,如果COM对象遇到错误,它可能会抛出带有描述性消息的异常(例如抛出新异常(“错误消息”)) 这个COM对象是从VB6代码和C++代码调用的。 从VB6代码中,我可以使用Err.message检索错误消息 在C++中,我得到了系统中指定的一个HES0x80131500。异常文档。 一旦我在C++中得到这个结果,我怎么能得到异常的错误消息(异常>消息< /代码>),就像在VB6?中的代码< > Err,消息< /代码>所返回的消息一样。 我搜索了网页,找

我有一个用C#编写的COM对象。在某些情况下,如果COM对象遇到错误,它可能会抛出带有描述性消息的异常(例如
抛出新异常(“错误消息”)

<>这个COM对象是从VB6代码和C++代码调用的。 从VB6代码中,我可以使用
Err.message
检索错误消息

在C++中,我得到了系统中指定的一个HES0x80131500。异常文档。

一旦我在C++中得到这个结果,我怎么能得到异常的错误消息(<代码>异常>消息< /代码>),就像在VB6?

中的代码< > Err,消息< /代码>所返回的消息一样。 我搜索了网页,找到了一些使用
FormatMessage
\u com\u error
的示例,但这些示例都没有返回我想要的消息。

已更新


尝试
QueryInterface
ISupportErrorInfo
接口调用失败的对象,然后使用引发异常的接口的
refid
调用
InterfaceSupportErrorInfo
方法。如果它返回
S_OK
,则只需调用该函数即可获得一个接口。然后使用
GetDescription
方法。

您是否尝试过
IErrorInfo
?检查
winerror.h
定义了
HRESULT
的设施。我强烈怀疑这是用户定义的工具,这意味着询问对象。
\u com\u error
似乎就是答案。很难说你为什么不走运,因为你没有显示你的代码。@Cheersandhth.-Alf
\u com\u error
依赖于
IErrorInfo
@DavidHeffernan:
\u com\u error
可以使用该接口,但默认情况下不使用它。必须将对象的接口传递给构造函数。我肯定OP没有这么做,否则会被提及的。@Cheersandhth.-Alf你确定吗。如果没有提供
IErrorInfo
,我会希望
\u com\u error
调用
GetErrorInfo
。否则,
\u com\u error
怎么办?仅仅调用
GetErrorInfo
?@DavidHeffernan也许就足够了。将更新。感谢@manuell的帮助。你让我走上了正确的道路。我设法找到了一个关于这个问题的有效例子。现在一切都好了!