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

            C++樂園

            C/C++ 交流

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              12 隨筆 :: 18 文章 :: 14 評論 :: 0 Trackbacks
            1.?使用_bstr_t解決內存問題

            ????COM編程當中一個重要的主題就是維護?BSTR?類型變量.?在一些情況下(主要是傳遞或者復制?BSTR?類型數據的時候)會產生一些問題:
            ????*?函數不能接收?BSTR?類型的變量參數
            ????*?復制?BSTR?類型數據的時候導致內存泄漏

            ????通常使用?_bstr_t?對象可以解決這些問題,?這個對象封裝了?BSTR?數據類型,?自動進行資源的分配合管理,?并且提供一個自動的數據類型轉換操作.

            ????注意:?使用強制類型轉換?_bstr_t?的方式對于?Unicode?模式鏈接是不適用的,?需要使用?Win32?模式鏈接.?

            ????此外,?這里也有一個內存管理的問題,?使用賦值模式就會產生內存泄漏:
            ????BSTR?tmpBStr;
            ????m_pObject1->get_ObjectString(&tmpBStr);
            ????_bstr_t?tmpbstr;
            ????tmpbstr=?tmpBStr;?//內存泄漏
            ?????SetDlgItemText(IDC_CURPROPVAL,?tmpbstr);

            ????在?tmpbstr?變量初始化的時候發生泄漏,?函數?SysAllocString?在創建?tmpbstr?變量的時候被自動調用.?這個新申請的資源以后不會釋放,?導致內存泄漏.?

            ?2.?BSTR?數據類型
            ?1)?BSTR?,?LPWSTR?和?LPSTR
            ????LPSTR?就是我們日常使用的一個MFC的char*指針的宏定義,?LPWSTR?比?LPSTR?多一倍的資源使用,?因為它和漢字一樣使用雙字節表達一個字符,?BSTR?則額外多一個信息頭部存放數據長度.

            ?2)?如何將LPSTR/LPCTSTR轉換成為BSTR/LPWSTR
            ????其實MFC/ATL提供了一組宏定義用于轉換這些數據類型,?因為需要先使用USES_CONVERSION;宏,?里面調用了_alloc申請并且自動釋放需要的資源,?為此你不必擔心前面提到的內存維護問題:
            ????A2BSTR????OLE2A????T2A????W2A?
            ????A2COLE????OLE2BSTR?T2BSTR?W2BSTR?
            ????A2CT??????OLE2CA???T2CA???W2CA?
            ????A2CW??????OLE2CT???T2COLE?W2COLE?
            ????A2OLE?????OLE2CW???T2CW???W2CT?
            ????A2T???????OLE2T????T2OLE??W2OLE?
            ????A2W???????OLE2W????T2W????W2T?

            ????或者你可以使用MSDN里面的一個無法通過索引提到的兩個函數實現字符串到BSTR的轉換

            ????//使用?/Gr?或者?/Gz?編譯開關,?或者包含一個?comsupp.lib?就行了
            ????#include?<comutil.h>
            ????int?main()
            ????{
            ???????char?sz[]="hello";
            ???????_bstr_t?b;
            ???????b?=?_com_util::ConvertStringToBSTR(sz);
            ???????char?*?p?=?_com_util::ConvertBSTRToString(b);
            ???????return?1;
            ????}?
            posted on 2007-02-26 14:20 小不懂^_^ 閱讀(1556) 評論(0)  編輯 收藏 引用
            色婷婷狠狠久久综合五月| 国产69精品久久久久观看软件| 久久精品天天中文字幕人妻| 无码人妻久久一区二区三区| 久久久久久狠狠丁香| 亚洲精品97久久中文字幕无码 | 欧美亚洲色综久久精品国产| 99久久精品影院老鸭窝| 久久久久亚洲爆乳少妇无| 麻豆精品久久久久久久99蜜桃| 久久99国内精品自在现线| 欧美久久一区二区三区| 久久国产精品无码HDAV| 中文字幕无码av激情不卡久久| 99久久久精品免费观看国产 | 亚洲欧美日韩久久精品第一区| 精品蜜臀久久久久99网站| 久久国产香蕉一区精品| 国内精品久久久久影院日本| 久久强奷乱码老熟女网站| 免费精品99久久国产综合精品| 国产色综合久久无码有码| 久久伊人中文无码| 94久久国产乱子伦精品免费| 蜜臀av性久久久久蜜臀aⅴ麻豆| 精品人妻伦九区久久AAA片69| 国内精品久久久久伊人av| 久久精品成人欧美大片| 久久一本综合| 久久天天躁狠狠躁夜夜2020老熟妇| 久久久久久免费一区二区三区| 中文字幕久久精品无码| 2021久久精品免费观看| 婷婷国产天堂久久综合五月| 久久国产综合精品五月天| 嫩草影院久久国产精品| 国产ww久久久久久久久久| 91麻豆精品国产91久久久久久 | 色8久久人人97超碰香蕉987| 亚洲国产成人精品女人久久久| 久久av高潮av无码av喷吹|