当您拥有的只是 HRESULT 时,我不知道从哪里可以获得有关含义、可能原因以及解决 COM 错误的可能解决方案的最佳信息。

搜索Google的术语“ 80004027”几乎是无用的,因为它会将您带到90%的时间,即“ 80004027是什么意思?”的随机讨论组?没有回答。

有什么好的资源可以做到这一点?为什么 MSDN 不是 Google 搜索结果的顶部?

有帮助吗?

解决方案

我总是使用 WinError.h。其中包含绝大多数 Windows 各种错误代码。

需要注意的一个关键指标是代码的 Facility 部分:第二个最高有效字节。即 0x80nnmmmm,其中 nn 是设施。这会告诉您哪个组件生成了代码。任何带有 7 的设施都是重新打包为 HRESULT 的 Windows 错误代码,您应该将低位字转换为十进制并在 WinError.h 中查找它。还有一些错误范围出现在它们自己的标题中(例如12000 - 12999 之间的任何内容都是 WinInet 错误代码,您应该在 WinInet.h 中查找它。

查找错误代码将为您提供符号名称,该名称可能在比代码本身或错误消息的措辞更多的文档中找到。

FACILITY_ITF(其值为 4,因此这些 HRESULT 从 0x8004 开始)表示错误是由您正在使用的接口定义的;您必须检查该界面才能了解其含义。

最后,COM 还提供了接口 IErrorInfo 来检索扩展的错误信息:调用 GetErrorInfo 检索错误对象。您必须查询 ISupportErrorInfo 并调用该接口的 InterfaceSupportsErrorInfo 方法来确定您调用的接口是否实际设置了错误对象(当然,如果它是模板代码,则它可能在撒谎)。

其他提示

%PROGRAMFILES%[某些版本的 Visual Studio] ools 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 对象相同),以便您可以获得描述问题的完整消息。

来自 Prakash 的良好链接(我不知道 RCNr 的东西 - 我认为这些字节是该设施的一部分 - 但这似乎只在 16 位 Windows 中是正确的。)

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

COM 错误代码的结构

COM 错误代码在 Google 结果中排名第二。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top