• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              12 隨筆 :: 18 文章 :: 14 評(píng)論 :: 0 Trackbacks
            1.?使用_bstr_t解決內(nèi)存問題

            ????COM編程當(dāng)中一個(gè)重要的主題就是維護(hù)?BSTR?類型變量.?在一些情況下(主要是傳遞或者復(fù)制?BSTR?類型數(shù)據(jù)的時(shí)候)會(huì)產(chǎn)生一些問題:
            ????*?函數(shù)不能接收?BSTR?類型的變量參數(shù)
            ????*?復(fù)制?BSTR?類型數(shù)據(jù)的時(shí)候?qū)е聝?nèi)存泄漏

            ????通常使用?_bstr_t?對(duì)象可以解決這些問題,?這個(gè)對(duì)象封裝了?BSTR?數(shù)據(jù)類型,?自動(dòng)進(jìn)行資源的分配合管理,?并且提供一個(gè)自動(dòng)的數(shù)據(jù)類型轉(zhuǎn)換操作.

            ????注意:?使用強(qiáng)制類型轉(zhuǎn)換?_bstr_t?的方式對(duì)于?Unicode?模式鏈接是不適用的,?需要使用?Win32?模式鏈接.?

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

            ????在?tmpbstr?變量初始化的時(shí)候發(fā)生泄漏,?函數(shù)?SysAllocString?在創(chuàng)建?tmpbstr?變量的時(shí)候被自動(dòng)調(diào)用.?這個(gè)新申請(qǐng)的資源以后不會(huì)釋放,?導(dǎo)致內(nèi)存泄漏.?

            ?2.?BSTR?數(shù)據(jù)類型
            ?1)?BSTR?,?LPWSTR?和?LPSTR
            ????LPSTR?就是我們?nèi)粘J褂玫囊粋€(gè)MFC的char*指針的宏定義,?LPWSTR?比?LPSTR?多一倍的資源使用,?因?yàn)樗蜐h字一樣使用雙字節(jié)表達(dá)一個(gè)字符,?BSTR?則額外多一個(gè)信息頭部存放數(shù)據(jù)長(zhǎng)度.

            ?2)?如何將LPSTR/LPCTSTR轉(zhuǎn)換成為BSTR/LPWSTR
            ????其實(shí)MFC/ATL提供了一組宏定義用于轉(zhuǎn)換這些數(shù)據(jù)類型,?因?yàn)樾枰仁褂肬SES_CONVERSION;宏,?里面調(diào)用了_alloc申請(qǐng)并且自動(dòng)釋放需要的資源,?為此你不必?fù)?dān)心前面提到的內(nèi)存維護(hù)問題:
            ????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里面的一個(gè)無法通過索引提到的兩個(gè)函數(shù)實(shí)現(xiàn)字符串到BSTR的轉(zhuǎn)換

            ????//使用?/Gr?或者?/Gz?編譯開關(guān),?或者包含一個(gè)?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 小不懂^_^ 閱讀(1565) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国内精品久久久久影院网站| 免费国产99久久久香蕉| 久久久久亚洲AV成人网人人网站| 久久久久久综合一区中文字幕| 99久久超碰中文字幕伊人| 人人狠狠综合久久亚洲婷婷| 久久综合久久鬼色| 久久青青草原精品国产| 国产精品九九久久免费视频 | 国产A三级久久精品| 午夜久久久久久禁播电影| yellow中文字幕久久网| 久久久久久久免费视频| 91精品国产乱码久久久久久| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产精品久久久久蜜芽| 亚洲va中文字幕无码久久| 国产农村妇女毛片精品久久| 久久高潮一级毛片免费| 精品人妻久久久久久888| 欧美午夜A∨大片久久 | 精品久久久久中文字幕一区| 久久久精品国产sm调教网站| 久久91精品国产91| 久久天天躁狠狠躁夜夜2020老熟妇| 九九久久自然熟的香蕉图片| 青青草原综合久久大伊人| 久久精品国产精品亚洲艾草网美妙 | 99久久婷婷免费国产综合精品| 久久综合久久综合久久综合| 亚洲精品乱码久久久久久蜜桃不卡| 人妻无码久久精品| 久久久久久噜噜精品免费直播| 情人伊人久久综合亚洲| 伊人色综合久久天天| 精品久久久久久中文字幕人妻最新| 综合网日日天干夜夜久久| 亚洲av成人无码久久精品| 久久香蕉超碰97国产精品| 久久久久久久久久久久中文字幕| 日韩精品久久久肉伦网站|