COM错误代码的最佳信息来源是什么?

5

我不知道从哪里获取关于COM错误含义、可能原因和解决方案的最佳信息,只有HRESULT时更是如此。

像“80004027”这样的搜索词在谷歌上几乎没有用处,因为它会将您送到随机的讨论组,其中90%的时间都没有回答“80004027是什么意思?”这个问题。

有没有好的资源可以提供帮助?为什么MSDN不是谷歌搜索结果的前几名呢?

4个回答

6
我通常使用WinError.h。它包含各种Windows错误代码。
要查看的关键指标是代码的Facility部分:第二个最重要的字节。即,0x80nnmmmm,其中nn是Facility。这告诉您生成代码的组件。任何Facility为7的内容都是作为HRESULT重新打包的Windows错误代码,您应将低位转换为十进制并在WinError.h中查找。还有一些出现在自己的标头中的错误范围(例如,从12000到12999的任何内容都是WinInet错误代码,您应在WinInet.h中查找)。
查找错误代码将为您提供符号名称,可能会在比代码本身或错误消息的措辞更多的文档中找到。
FACILITY_ITF(其值为4,因此这些HRESULT以0x8004开头)表示错误由您正在使用的接口定义;您将不得不检查该接口以了解其含义。
最后,COM还提供了接口IErrorInfo来检索扩展错误信息:调用GetErrorInfo以检索错误对象。您将不得不查询ISupportErrorInfo,并调用该接口的InterfaceSupportsErrorInfo方法,以确定您调用的接口是否实际设置了错误对象(当然,如果是模板代码,则可能会撒谎)。

这是我一直使用的...基本上ErrorLookup读取这个文件! - Shaun Austin

5
在您的%PROGRAMFILES%[某个Visual Studio版本]\Tools Common7\文件夹中,错误查找(ErrLook.exe)通常会给您错误消息,但并非总是如此,它将为您提供以下内容: |---------------------------------------------------| | [] Error Lookup | |---------------------------------------------------| | Value: [0x80004027] | | | | Error Message | | +---------------------------------------------+ | | |The component or application containing the | | | |component has been disabled | | | | | | | +---------------------------------------------+ | | [Modules...] [Look up] [Close] [Help] | |----------------------------------------------------
如果这不起作用,您可以从这里获得一些想法: http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx (错误查找只是使用FORMAT_MESSAGE_FROM_SYSTEM标志调用FormatMessage())
如果COM错误不是系统错误,您可能还需要检查引发错误的组件的文档。
如果您在代码中捕获错误,您可以希望组件实现丰富的错误(GetErrorInfo(),类似于VB中的Err对象),以便您可以获得描述问题的完整消息。

0

0

来自Prakash的好链接(我不知道RCNr的东西 - 我以为那些字节是设施的一部分 - 但似乎只有在16位Windows中才是真的。)

通常,这些未知代码是特定于您正在使用的接口/组件的。设施将设置为FACILITY_ITF。我有一个旧程序HRPlus(link?),可以解析HRESULTs。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接