• <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>

            大龍的博客

            常用鏈接

            統計

            最新評論

            CComPtr Class ---- 轉自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 大龍 閱讀(460) 評論(0)  編輯 收藏 引用

            伊人久久成人成综合网222| 国产精品女同久久久久电影院| 亚洲国产精品久久久久婷婷软件| 欧美精品九九99久久在观看| 激情五月综合综合久久69| 欧美亚洲另类久久综合婷婷| 亚洲午夜久久久久久噜噜噜| 热99re久久国超精品首页| 久久天天躁狠狠躁夜夜avapp| 久久精品三级视频| 伊人久久精品影院| 精品一区二区久久久久久久网站| 久久国产成人| 国产成人久久精品激情| 四虎影视久久久免费| 国产情侣久久久久aⅴ免费| 亚洲国产成人精品91久久久 | 久久强奷乱码老熟女网站| 精品久久久久久久无码| 武侠古典久久婷婷狼人伊人| 精品国产福利久久久| 精品久久久久久中文字幕大豆网| 亚洲国产精品婷婷久久| 国产精品免费久久| 国产精品综合久久第一页| 精品久久久久久无码专区不卡| 久久有码中文字幕| 精品久久久无码中文字幕天天| 久久人爽人人爽人人片AV| 久久久久亚洲国产| 一本色综合久久| 日日狠狠久久偷偷色综合0| 爱做久久久久久| 国产农村妇女毛片精品久久| 久久这里只精品国产99热| 美女写真久久影院| 久久精品男人影院| 久久se精品一区精品二区| 久久天堂电影网| 精品人妻伦九区久久AAA片69| 亚洲国产精品久久久久婷婷老年 |