• <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 大龍 閱讀(464) 評論(0)  編輯 收藏 引用

            久久精品青青草原伊人| 国产精品99久久久久久猫咪 | 久久精品中文字幕第23页| 国产巨作麻豆欧美亚洲综合久久| 久久久精品国产Sm最大网站| 亚洲αv久久久噜噜噜噜噜| 精品久久久久久久久中文字幕| 久久久精品人妻无码专区不卡 | 久久久久se色偷偷亚洲精品av| 久久精品a亚洲国产v高清不卡| 久久人搡人人玩人妻精品首页| 色诱久久久久综合网ywww| 久久精品中文字幕第23页| 国内精品久久久久影院优| 狠狠色丁香久久婷婷综合图片| 99久久精品免费看国产免费| 一本色道久久88精品综合| 久久久网中文字幕| 国产精品欧美亚洲韩国日本久久| 无遮挡粉嫩小泬久久久久久久| 亚洲精品97久久中文字幕无码| 国产精品一区二区久久精品涩爱| 亚洲国产精品久久| 久久精品国产亚洲av麻豆色欲| 尹人香蕉久久99天天拍| 久久精品无码专区免费| 国产精品免费久久久久久久久| 久久国产精品成人片免费| 日韩精品久久久久久免费| 久久人妻AV中文字幕| 久久免费视频1| 日本精品久久久久影院日本| 国产精品热久久无码av| 亚洲国产成人久久精品影视| 99久久免费只有精品国产| 久久亚洲精品中文字幕三区| 久久精品国产亚洲AV高清热 | 国内精品久久久久久不卡影院| 91精品国产综合久久精品| 久久久久久久99精品免费观看| 久久精品成人免费网站|