我有一个用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
这是什么意思?我该如何处理我的方法失败的原因?
答案 0 :(得分:4)
您在诊断错误时遇到问题的一个重要原因是因为您使用了一个快捷方式。您正在为IDispatch :: Invoke()的 pExcepInfo 参数传递NULL。这对IDispatch来说没问题,它基本上意味着“不要打扰告诉我你对异常的了解,我会从错误代码中自行解决”。您将错过好处,例如错误的文本描述和记录错误的帮助文件。如果可供使用的话。很明显,当你提出这个问题时,你不想采取这种捷径。
Anyhoo,您仍然可以从异常代码中对问题进行逆向工程。工具0x0a保留给OLE自动化应用程序,错误代码特定于应用程序。在“Word error 5153”中转为0x1421。把它放在谷歌查询中,第二次点击会给你一个链接,找到一个已经找出错误5153意味着的人。
您正在尝试覆盖其他人已打开的文件。很常见的不幸事故。
修复你的代码,你需要向人类展示错误描述,以便他们可以处理它。
答案 1 :(得分:2)
来自“ HR Plus ”工具的0x800a1421
信息:
0x0000000A
0x00000001
0x00001421
关于来自“错误查找”工具的0x00001421
:
找不到控件ID 。