3

我在自己的窗口中托管 Web 浏览器控件。以下是相关步骤:

CoGetClassObject(CLSID_WebBrowser, 
                 CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER, 
                 NULL, IID_IClassFactory, (void **)&pClassFactory);

pClassFactory->CreateInstance(0, IID_IOleObject, (void **)&pObject);

pClassFactory->Release(); 

pObject->SetClientSite((IOleClientSite *)impl)
OleSetContainedObject((struct IUnknown *)pObject, true)
pObject->DoVerb(OLEIVERB_SHOW, NULL, (IOleClientSite *)impl, 0, hHpsWnd, &rect);

pWB->put_Visible(VARIANT_FALSE);

hr=pWB->Quit();

在上面的最后一条语句, hr 返回值是E_FAIL. 我的代码中这个失败的最终结果是泄漏了一堆资源。我做错了什么?

4

1 回答 1

1

阅读此处的文档,它指出 WebBrowser 对象(即 CLSID_WebBrowser)从 Quit 方法返回错误,因为它在上下文中没有意义。Quit 方法将退出进程外版本的 IE,它也使用相同的接口进行通信。

我唯一能建议的是仔细检查您是否正在释放与浏览器相关的所有 COM 对象。

于 2010-01-04T18:48:52.927 回答