在我的ATL项目中,我有一个窗口,它是html浏览器的主机。
我需要在运行时创建/销毁此窗口。
第三次调用IWebBrowser2.Navigate2
时,会触发状态为DISPID_NAVIGATEERROR
的{{1}}。 MSDN将其描述为未找到服务器或代理,但我将该方法称为与先前会话中完全相同的URL。
我在代码中执行以下操作:
初始化程序:
INET_E_RESOURCE_NOT_FOUND (0x800C0005)
导航例程:
ole_obj_.CoCreateInstance(CLSID_WebBrowser);
ole_obj_->SetClientSite(this);
ole_obj_->DoVerb(OLEIVERB_SHOW, NULL, site, 0, GetHWND(), &rect);
CComQIPtr<IWebBrowser2> webBrowser(ole_obj_);
DispEventAdvise(webBrowser, &DIID_DWebBrowserEvents2);
销毁例程:
CComQIPtr<IWebBrowser2> webBrowser(ole_obj_);
webBrowser->Navigate2(&varUrl, 0, 0, 0, 0);
有趣的事实是,如果我发表评论DispEventUnadvise(ole_obj_, &DIID_DWebBrowserEvents2);
ole_obj_->Close(OLECLOSE_NOSAVE);
ole_obj_.Release();
它有效,但我当然会收到内存泄漏。
欢迎任何建议。