• <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++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              66 Posts :: 16 Stories :: 236 Comments :: 0 Trackbacks

            公告

            王一偉 湖南商學院畢業 電子信息工程專業

            常用鏈接

            留言簿(19)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 388624
            • 排名 - 64

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            常用字符串件的類型轉換。
             
            From
            To
            Sample
            字符串常量
            BSTR
            Right:
            BSTR bs = ::SysAllocString(_T("Test string"));
            ::SysFreeString();
            Wrong:
            BSTR bs = _T("Test string"); //ERROR
            LPWSTR /
            LPCWSTR /
            WCHAR* /
            wchar_t
            BSTR
            Right:
            LPCTSTR sz1 = _T("Test String");
            BSTR bs = ::SysAllocString(sz1);
            ::SysFreeString();
             
            Wrong:
            LPTSTR sz1 = _T("Test String");
            BSTR bs = sz1; //ERROR
            BSTR
            LPCWSTR /
            const WCHAR * /
            const wchar_t *
            Right:
            BSTR bs = ...; //
            ...
            LPCTSTR sz = static_cast<LPCTSTR>bs;
            ...
            ::SysFreeString(bs);
            //Never use sz after this line
             
            Wrong:
            BSTR bs = ...; //
            ...
             
            LPCTSTR sz = bs;
            ...
            ::SysFreeString(bs);
            //Never use sz after this line
            _tcslen(sz); //ERROR
             
            BSTR
            LPWSTR /
            WCHAR* /
            wchar_t*
            Right:
            BSTR bs = ...; //
            //...
            UINT len = ::SysStringLen(bs);
             
            // Do not modify the BSTR content by
            // C/C++ string functions
            LPTSTR sz = new TCHAR[len+1];
            _tcsncpy(sz, bs, len);
            ::SysFreeString(bs);
             
            delete []sz;
            Wrong:
            BSTR bs = ...; //
            //...
             
            // Do not modify the BSTR content by
            // C/C++ string functions
            LPTSTR sz = bs; //Error
             
            CString
            BSTR
            Right:
             
            CString str1 = ...;
             
            BSTR bs = str1.AllocSysString();
            SomeMethod(bs);
            // void SomeMethod([in]BSTR)
            ::SysFreeString(bs);
             
            CComBSTR bs1(static_cast<LPCTSTR>(str1));
            SomeMethod(static_cast<BSTR> (bs1) );
             
            // void SomeMethod([in] BSTR )
            _bstr_t bs2( static_cast<LPCTSTR>(str1));
            SomeMethod(static_cast<BSTR> (bs2) );
             
            Wrong:
            CString str1 = ...;
             
            SomeMethod(str1.AllocSysString());
             
            // No one will releasee the return BSTR of
            // str1.AllocSysString()
             
            BSTR
            CString
            Right:
             
            BSTR bs = SysAllocString(_T(“Test”));
            CString str1(bs);
            CString str2;
            Str2 = bs;
            SysFreeString(bs); // Never forget this line
            char* / LPSTR / LPCSTR
            BSTR
            Right:
            Solution 1
            char str[MAX_STR_LEN] = "ANSI string";
            WCHAR wstr[MAX_WSTR_LEN];
            // Convert ANSI to Unicode
             
            MultiByteToWideChar( CP_ACP, 0, str,
                    strlen(str)+1, wstr,  
                 sizeof(wstr)/sizeof(wstr[0]) );
             
            BSTR bs1 = ::SysAllocString(wstr);
             
            CString cs = str;
            BSTR bs2 = cs.AllocSysString()
             
            Solution 2
            char str[MAX_STR_LEN] = "ANSI string";
            _bstr_t bs1(str);
            CComBSTR bs2(str);
             
            Wrong:
            char *str = "ANSI string";
            BSTR bstr1 = SysAllocString(
                        (const OLECHAR*) str);
            BSTR
            char* / LPSTR / LPCSTR
            Right:
            Solution 1
            char str[MAX_STR_LEN];
            BSTR bs = ::SysAllocString(L"Test");
            // Convert ANSI to Unicode
            WideCharToMultiByte( CP_ACP, 0,
               (LPCWSTR)bs, -1,
               str, MAX_STR_LEN, NULL, NULL );
            ::SysFreeString(bs);
             
            Solution 2
            BSTR bs = ::SysAllocString(L"Test");
            _bstr_t bs1(bs, false);
            const char* str = static_cast <const char*> bs1;
             
            Wrong:
            BSTR bstr1 = SysAllocString(L”ANSI string");
            char *str = (char*) bstr1;    
             
            IMPORTANT: 上面所有的例子都是按照UNICODE應用程序設計的。并且不考慮BSTR中包含多個字串的情況,也就是BSTR只在結束的位置有一個0結束符。對于MBCS/ANSI程序,可以參考上面的例子。主要區別是對于現在的COM版本OLECHARwchar_t,但是TCHAR 對于UNICODE程序才是wchar_t
             
            posted on 2007-07-17 11:55 @王一偉 閱讀(1476) 評論(0)  編輯 收藏 引用
            午夜精品久久久久久久久| 久久综合综合久久狠狠狠97色88| 久久99精品久久久久久不卡| 久久久久亚洲AV综合波多野结衣| 亚洲人成无码网站久久99热国产 | 99999久久久久久亚洲| 免费观看久久精彩视频| 久久综合给合综合久久| 91久久精品91久久性色| 亚洲国产香蕉人人爽成AV片久久| 久久99精品国产自在现线小黄鸭| 久久精品无码av| 色妞色综合久久夜夜| 久久国产成人亚洲精品影院| 久久久久亚洲AV无码永不| 亚洲国产成人久久一区久久| 久久91精品国产91久久户| 久久久久高潮毛片免费全部播放| 久久五月精品中文字幕| 天天综合久久久网| 精品无码久久久久久尤物| 一本色道久久综合亚洲精品| 久久久久久亚洲精品不卡| 色综合色天天久久婷婷基地| 久久久久久国产精品免费无码| 蜜桃麻豆WWW久久囤产精品| 久久国产高清一区二区三区| 韩国无遮挡三级久久| 韩国免费A级毛片久久| 亚洲国产精品无码久久久秋霞2| 中文字幕久久亚洲一区| 久久精品二区| 久久久久九国产精品| 久久久久亚洲爆乳少妇无| 欧美久久一级内射wwwwww.| 久久国产精品波多野结衣AV| 色婷婷久久综合中文久久一本| 久久精品亚洲精品国产欧美| 人妻少妇精品久久| 欧美成人免费观看久久| 国产亚洲美女精品久久久2020|