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

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 387834
            • 排名 - 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 @王一偉 閱讀(1470) 評論(0)  編輯 收藏 引用
            久久99热这里只有精品66| 色欲久久久天天天综合网 | 欧洲成人午夜精品无码区久久| 色狠狠久久综合网| 久久久久亚洲Av无码专| 国产成人精品久久| 精品多毛少妇人妻AV免费久久| 久久99国产亚洲高清观看首页| 久久综合九色综合久99| 99久久精品国产高清一区二区| 久久人人爽人人精品视频| 久久99国产精品久久99| av色综合久久天堂av色综合在| 国产成人综合久久精品尤物| 亚洲av伊人久久综合密臀性色| 久久精品这里只有精99品| 久久久久国产精品熟女影院| 中文字幕久久亚洲一区| 久久99国产一区二区三区| 精品久久久久久无码专区不卡| 久久婷婷五月综合97色直播| 久久夜色精品国产www| 91精品国产综合久久香蕉| 大伊人青草狠狠久久| 国产亚洲精品久久久久秋霞 | 久久精品国产69国产精品亚洲| 囯产极品美女高潮无套久久久| 色老头网站久久网| 亚洲午夜精品久久久久久浪潮 | 久久综合五月丁香久久激情| 久久精品国产亚洲一区二区| 久久ZYZ资源站无码中文动漫| 久久人人青草97香蕉| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 国产精品无码久久四虎| 久久精品aⅴ无码中文字字幕不卡| 久久精品中文无码资源站| 久久久久99这里有精品10 | 99久久精品免费看国产一区二区三区| 久久精品中文字幕一区| 色婷婷噜噜久久国产精品12p|