C++ 从C+;中的HRESULT检索错误消息+;调用C#COM对象后
我有一个用C#编写的COM对象。在某些情况下,如果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,消息< /代码>所返回的消息一样。 我搜索了网页,找
抛出新异常(“错误消息”)
)
<>这个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的帮助。你让我走上了正确的道路。我设法找到了一个关于这个问题的有效例子。现在一切都好了!