【问题标题】:What is the meaning of 0x800a1421 HRESULT?0x800a1421 HRESULT 是什么意思?
【发布时间】:2013-04-24 08:36:49
【问题描述】:

我有一个用 C++ 编写的 dll。它的主要目的是通过 OLE 调用 Word 上的方法。我尝试调用方法“SaveAs”:

HRESULT hr;
szFunction = OLESTR("SaveAs");
    hr = doc->GetIDsOfNames(IID_NULL, &szFunction, 1, 
            LOCALE_USER_DEFAULT, 
            &dispid_Cap);
    hr = doc->Invoke(dispid_Cap, IID_NULL, 
            LOCALE_USER_DEFAULT, DISPATCH_METHOD, 
            &dpCap, NULL, NULL, NULL);

它失败了,我不知道为什么。 hr 的值为 -2146823135。 我像这样将它转换为十六进制:

sprintf(hex_buff, "%x", (unsigned int)hr);

这给了 0x800a1421

我试图找出这段代码对这个程序的含义:http://www.microsoft.com/en-us/download/details.aspx?id=985 但结果是:

as an HRESULT: Severity: FAILURE (1), Facility: 0xa, Code 0x1421
NOT FOUND: 800a1421

这是什么意思?我应该如何继续找出我的方法失败的原因?

【问题讨论】:

  • 试试看这里:en.wikipedia.org/wiki/HRESULT
  • 我做了,但我发现'8'代表失败(此外),'0xa'指向设施'控制',错误代码是0x1421。不过,我还是不明白 0x1421 是什么意思……
  • 请把问题从“...这个HRESULT?”到“... of 0x800a1421 HRESULT”

标签: c++ com ole


【解决方案1】:

您无法诊断错误的一个重要原因是您使用了太多的快捷方式。您正在为 IDispatch::Invoke() 的 pExcepInfo 参数传递 NULL。 IDispatch 没问题,它基本上意味着“不要费心告诉我你对异常的了解,我会自己从错误代码中整理出来”。您会错过诸如错误的文本描述和记录错误的帮助文件之类的好东西。如果可供使用的话。当你问这个问题时,显然你不想走这种捷径。

无论如何,您仍然可以从异常代码中对问题进行逆向工程。设施 0x0a 为 OLE 自动化应用程序保留,错误代码特定于应用程序。在“Word 错误 5153”中变为 0x1421。将其放入 Google 查询中,第二次点击会为您提供一个链接,该链接指向已弄清楚错误 5153 意味着什么的人。

您正试图覆盖其他人打开的文件。很常见的事故。

修复您的代码,您需要将错误描述显示给人类,以便他们处理。

【讨论】:

    【解决方案2】:

    来自“HR Plus”工具的关于0x800a1421 的信息:

    • 错误类型:OLE HRESULT
    • 错误工具:FACILITY_CONTROL 0x0000000A
    • 严重性:SEVERITY_ERROR 0x00000001
    • 代码:0x00001421

    关于来自“错误查找”工具的0x00001421找不到控件 ID

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多