gpt4 book ai didi

c++ - 我必须使用 ->Release() 吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:49 25 4
gpt4 key购买 nike

我正在使用 C++ 上的网络浏览器主机,我设法接收事件,并且我在 DISPID_DOCUMENTCOMPLETE 上运行此无效:

void DocumentComplete(LPDISPATCH pDisp, VARIANT *url)
{
READYSTATE rState;

iBrowser->get_ReadyState(&rState);

if(rState == READYSTATE_COMPLETE)
{
HRESULT hr;
IDispatch *pHtmlDoc = NULL;
IHTMLDocument2 *pDocument = NULL;
IHTMLElement *pBody = NULL;
IHTMLElement *lpParentElm = NULL;
BSTR bstrHTMLText;

hr = iBrowser->get_Document(&pHtmlDoc);

hr = pHtmlDoc->QueryInterface(IID_IHTMLDocument2, (void**)&pDocument);

if( (FAILED(hr)) || !pDocument)
{
MessageBox(NULL, "QueryInterface failed", "WebBrowser", MB_OK);
}

hr = pDocument->get_body( &pBody );

if( (!SUCCEEDED(hr)) || !pBody)
{
MessageBox(NULL, "get_body failed", "WebBrowser", MB_OK);
}

pBody->get_parentElement(&lpParentElm);

lpParentElm->get_outerHTML(&bstrHTMLText);

_bstr_t bstr_t(bstrHTMLText);

std::string sTemp(bstr_t);

MessageBox(NULL, sTemp.c_str(), "WebBrowser", MB_OK);
}
}

我不太了解 C++,我是通过查看 google 中的其他代码构建这段代码的。现在我知道我必须使用 ->Release,但我必须使用所有这些吗?:

    pHtmlDoc->Release();
pDocument->Release();
pBody->Release();
lpParentElm->Release();
iBrowser->Release();

因为在我用来构建代码的示例中,它仅将它用于 IHTMLElement(s)。

最佳答案

是的,您必须在这些指针上调用 Release(),否则对象会泄漏。 BSTR 也是如此。

如果为此使用智能指针 - ATL::CComPtr/ATL::CComBSTR_com_ptr_t,你会过得更好/_bstr_t.

关于c++ - 我必须使用 ->Release() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3856017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com