1

我有一个应用程序,我一直在使用它来解析 HTML 文档中的数据。该应用程序已经运行了几年,直到本周 IID_IPersistStreamInit 的 QueryInterface 方法开始失败。对 QueryInterface 的调用返回 -2147467262,它未通过 SUCCEEDED(hr) 测试。任何想法为什么这会停止工作?

谢谢,韦德

if (!myIE->IsValid())
   return;

HRESULT hr;
LPDISPATCH lpDispatch = NULL;
LPOLECOMMANDTARGET lpOleCommandTarget = NULL;
LPPERSISTSTREAM lpPersistStream = NULL;

lpDispatch = myIE->GetHtmlDocument(); 

ASSERT(lpDispatch);

if (lpDispatch == NULL)
  AfxMessageBox("Couldn't get IHTMLDocument2 interface!");    
else
{ 
   hr = lpDispatch->QueryInterface(IID_IPersistStreamInit, (void**) &lpPersistStream);
   if (SUCCEEDED(hr) && lpPersistStream != NULL)
4

1 回答 1

0

你在什么时候执行上面的代码?如果它没有完成,你应该只在以下之后执行它:

  1. 导航到 about:blank 以正确加载 mshtml
  2. 在继续之前,请确保调用 DocumentComplete 事件,这意味着导航已完成。

只有这样才能安全地请求流接口。有关更多信息,请参阅从 Stream 加载 HTML 内容

现在,如果所有这些都知道并得到照顾,您可能会从另一个方向寻求解决方案。错误代码表示“不支持此类接口”。我会尝试找出包含该接口的组件是什么,然后重新注册它。但鉴于这是你正在处理的 IE 东西,我有点怀疑它的安装是否搞砸了。

于 2009-10-13T21:13:37.353 回答