IID_IPersistStreamInit的QueryInterface方法退出工作

时间:2009-10-13 20:41:46

标签: mfc queryinterface

我有一个应用程序,我一直用它来解析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)

1 个答案:

答案 0 :(得分:0)

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

  1. 导航到about:blank以正确加载mshtml
  2. 确保调用DocumentComplete事件,这意味着导航已完成,然后再继续。
  3. 只有这样才能安全地请求流接口。有关更多信息,请参阅Loading HTML content from a Stream

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