0x800a1421 HRESULT 是什么意思?

aur*_*rel 4 c++ com ole

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

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);
Run Code Online (Sandbox Code Playgroud)

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

sprintf(hex_buff, "%x", (unsigned int)hr);
Run Code Online (Sandbox Code Playgroud)

这给了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
Run Code Online (Sandbox Code Playgroud)

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

Han*_*ant 5

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

Anyhoo,您仍然可以从异常代码中对问题进行逆向工程。设施 0x0a 是为 OLE 自动化应用程序保留的,错误代码特定于应用程序。在“Word 错误 5153”中变成 0x1421。把它放在谷歌查询中,第二次点击会给你一个链接,指向已经弄清楚错误 5153 意味着什么的人。

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

修复您的代码,您需要向人显示错误描述,以便他们可以处理它。