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

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 387044
            • 排名 - 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 @王一偉 閱讀(1462) 評論(0)  編輯 收藏 引用
            久久亚洲国产欧洲精品一| 无码人妻久久一区二区三区蜜桃| 亚洲综合久久夜AV | 国产精品一区二区久久精品无码| 狠狠色丁香久久婷婷综合五月| 久久久久久午夜精品| 久久久久久青草大香综合精品| 一级做a爱片久久毛片| 99久久免费国产精品热| 精品久久久久久久无码| 久久亚洲精品国产精品| 999久久久无码国产精品| 久久精品国产亚洲av水果派| 亚洲AV无码久久精品色欲| 久久99精品国产麻豆宅宅| 久久福利资源国产精品999| 国内精品久久久久影院老司 | 久久久www免费人成精品| 久久久久人妻一区二区三区| 亚洲中文字幕无码一久久区 | 精品久久人妻av中文字幕| 久久国产精品99国产精| 久久久青草久久久青草| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久婷婷人人澡人人爽人人爱| 久久久久国产精品人妻| 国产美女久久精品香蕉69| 人人狠狠综合久久88成人| 久久精品人人做人人爽电影| 亚洲国产精品综合久久网络| 久久99国产综合精品女同| 久久久久久免费视频| 欧美日韩精品久久久免费观看| 中文字幕亚洲综合久久2| 免费观看久久精彩视频| 久久免费高清视频| 大蕉久久伊人中文字幕| 中文精品99久久国产 | 久久人人爽人爽人人爽av| 久久九九精品99国产精品| 久久99精品国产麻豆宅宅|