Я пишу надстройку для Internet Explorer (BHO) и использую интеллектуальные указатели CComPtr. Интересно:
void STDMETHODCALLTYPE CHelloWorldBHO :: OnDocumentComplete (IDispatch * pDisp, VARIANT * pvarURL) { // Запрос интерфейса IWebBrowser2. CComQIPtr spTempWebBrowser = pDisp; // Связано ли это событие с браузером верхнего уровня? если (spTempWebBrowser && m_spWebBrowser && m_spWebBrowser.IsEqualObject (spTempWebBrowser)) { // Получить текущий объект документа из браузера ... CComPtr spDispDoc; hr = m_spWebBrowser-> get_Document (& spDispDoc); если (УСПЕШНО (час)) { // ... и запросить документ HTML. CComQIPtr htmlDoc2 = spDispDoc; m_spHTMLDocument = spHTMLDoc; } } }Следует ли мне выпустить spHTMLDocument в функции SetSite, как я делаю с m_spWebBrowser (как в упомянутой ранее ссылке)?
CComPtr getObjects (CComQIPtrhtmlDoc3) { Объекты CComPtr; hr = htmlDoc3-> getElementsByTagName (CComBSTR (L "объект"), & объекты); если (УСПЕШНО (час) && объекты! = NULL) { возвращать объекты; } return NULL; }
void RemoveImages (IHTMLDocument2 * pDocument);но вызывается умным указателем:
CComQIPtrЯ бы лучше написал это так:spHTMLDoc = spDispDoc; если (spHTMLDoc! = NULL) { // Наконец, удалим изображения. RemoveImages (spHTMLDoc); }
void RemoveImages (CComPtrЭто лучше?document2);