CComQIPtr智能指针

//使用CComQIPtr智能指针,它们在销毁的时候,不需要手动去Replease释放接口指针,
//在赋值的时候,也不需要手动的AddRef,
//在出现异常的时候,会自动处理异常,而不需要额外的异常处理代码。
//但是记住:重复赋值的时候,需要提前手动Replease释放


CComQIPtr pWebBrowser2;
CComQIPtr pDocDisp;
CComQIPtr pHtmlDoc3;

CComQIPtr pHtmlElement;//负责获取元素
CComQIPtr pElement2;//负责获取坐标
CComQIPtr HtmlRect;

HRESULT hr = S_FALSE;

//用COM接口来设置元素

pWebBrowser2 = m_pBrowser->GetWebBrowser2();
if (!pWebBrowser2)
{
return false;
}

hr = pWebBrowser2->get_Document(&pDocDisp);
if (FAILED(hr) || NULL == pDocDisp)
{
return false;
}


hr = pDocDisp->QueryInterface(IID_IHTMLDocument3, (void**)&pHtmlDoc3);
if (FAILED(hr) || NULL == pHtmlDoc3){
return false;
}

hr = pHtmlDoc3->getElementById(L"username", &pHtmlElement);
if (FAILED(hr) || NULL == pHtmlElement){
    return false;
}

//上次赋值过了,这次赋值需要提前Release释放
pHtmlElement.Release();

hr = pHtmlDoc3->getElementById(L"password", &pHtmlElement);
if (FAILED(hr) || NULL == pHtmlElement){
    return false;
}

你可能感兴趣的:(CComQIPtr智能指针)