• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計

            最新評論

            CComPtr Class ---- 轉(zhuǎn)自msdn

            A smart pointer class for managing COM interface pointers.

            template<
            class T
            >
            class CComPtr
            T

            A COM interface specifying the type of pointer to be stored.

            ATL uses CComPtr and CComQIPtr to manage COM interface pointers. Both are derived from CComPtrBase, and both perform automatic reference counting.

            The CComPtr and CComQIPtr classes can help eliminate memory leaks by performing automatic reference counting. The following functions both perform the same logical operations; however, note how the second version may be less error-prone by using the CComPtr class:

            Visual C++
            // Error-checking routine that performs manual lifetime management
            // of a COM IErrorInfo object
            HRESULT CheckComError_Manual()
            {
            HRESULT hr;
            CComBSTR bstrDescription;
            CComBSTR bstrSource;
            CComBSTR bstrHelpFile;
            IErrorInfo* pErrInfo = NULL; // naked COM interface pointer
            hr = ::GetErrorInfo(0, &pErrInfo);
            if(hr != S_OK)
            return hr;
            hr = pErrInfo->GetDescription(&bstrDescription);
            if(FAILED(hr))
            {
            pErrInfo->Release();   // must release interface pointer before returning
            return hr;
            }
            hr = pErrInfo->GetSource(&bstrSource);
            if(FAILED(hr))
            {
            pErrInfo->Release();   // must release interface pointer before returning
            return hr;
            }
            hr = pErrInfo->GetHelpFile(&bstrHelpFile);
            if(FAILED(hr))
            {
            pErrInfo->Release();   // must release interface pointer before returning
            return hr;
            }
            pErrInfo->Release();      // must release interface pointer before returning
            return S_OK;
            }
            
            Visual C++
            // Error-checking routine that performs automatic lifetime management
            // of a COM IErrorInfo object through a CComPtr smart pointer object
            HRESULT CheckComError_SmartPtr()
            {
            HRESULT hr;
            CComBSTR bstrDescription;
            CComBSTR bstrSource;
            CComBSTR bstrHelpFile;
            CComPtr<IErrorInfo> pErrInfo;
            hr = ::GetErrorInfo(0, &pErrInfo);
            if(hr != S_OK)
            return hr;
            hr = pErrInfo->GetDescription(&bstrDescription);
            if(FAILED(hr))
            return hr;
            hr = pErrInfo->GetSource(&bstrSource);
            if(FAILED(hr))
            return hr;
            hr = pErrInfo->GetHelpFile(&bstrHelpFile);
            if(FAILED(hr))
            return hr;
            return S_OK;
            }   // CComPtr will auto-release underlying IErrorInfo interface pointer as needed
            

            In Debug builds, link atlsd.lib for code tracing.

             Requirements

            Header: atlbase.h

            posted on 2008-09-04 00:12 大龍 閱讀(459) 評論(0)  編輯 收藏 引用

            亚洲欧美日韩久久精品| 成人综合伊人五月婷久久| 一本色道久久综合狠狠躁篇| 国产成人精品久久| 天天爽天天爽天天片a久久网| 久久一区二区三区免费| 亚洲第一极品精品无码久久| 亚洲天堂久久精品| 日韩精品久久无码人妻中文字幕| 国产福利电影一区二区三区久久老子无码午夜伦不 | 国产精品综合久久第一页| 久久人人爽人人人人爽AV | 蜜臀久久99精品久久久久久小说 | 国产福利电影一区二区三区,免费久久久久久久精 | 色88久久久久高潮综合影院| 久久综合视频网站| 色综合久久久久网| 久久国产色AV免费看| 久久精品卫校国产小美女| 午夜精品久久久内射近拍高清 | 99精品久久久久久久婷婷| 久久久久亚洲AV无码专区桃色| 久久久国产精品福利免费 | 久久精品一区二区国产| 欧美牲交A欧牲交aⅴ久久 | 久久国产精品免费一区二区三区| 精品久久人人爽天天玩人人妻| 日韩欧美亚洲综合久久影院Ds| 久久国产精品一区| 久久精品国产国产精品四凭 | 久久婷婷色综合一区二区| 日本久久中文字幕| 久久亚洲国产最新网站| 久久婷婷午色综合夜啪| 久久综合色老色| 亚洲va久久久噜噜噜久久男同| 久久婷婷五月综合成人D啪 | 婷婷伊人久久大香线蕉AV| 伊人久久大香线蕉av不变影院| 欧美牲交A欧牲交aⅴ久久| 国产精品久久久久无码av|