锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产色视频一区,国产婷婷色一区二区三区在线,亚洲欧洲在线观看http://m.shnenglu.com/gtwdaizi/category/5210.htmlzh-cnThu, 30 Oct 2008 03:56:52 GMTThu, 30 Oct 2008 03:56:52 GMT60[Windows Moble/VC++]GetCurrentTime()/GetLocalTime()/GetTickCount()http://m.shnenglu.com/gtwdaizi/articles/49177.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Thu, 08 May 2008 01:34:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/49177.htmlhttp://m.shnenglu.com/gtwdaizi/comments/49177.htmlhttp://m.shnenglu.com/gtwdaizi/articles/49177.html#Feedback0http://m.shnenglu.com/gtwdaizi/comments/commentRss/49177.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/49177.html
    GetCurrentTime()鍙拰16浣嶇増鏈殑windows鍏煎錛屽湪32浣峸indows涓嬫渶濂界敤gettickcount();

2. GetLocalTime()

    GetLocalTime()鍦ㄤ笉鍚岀殑鏈哄櫒涓細鏈変笉鍚岀殑緇撴灉錛岃繖鍜屼綘鍦ㄦ帶鍒墮潰鏉夸腑鐨勬椂鍖鴻緗湁鍏? 璇ュ嚱鏁版槸鑾峰彇鐨勭郴緇熷綋鍓嶆墍灞炴椂鍖虹殑鏃墮棿, 姣斿璇? 鍦ㄥ寳浜椂鍖? 閭d箞鑾峰彇鐨勮鏃墮棿鐨勬椂闂?

3. GetSystemTime()
    
     GetSystemTime()鑾峰彇鐨勬牸鏋楀凹娌繪椂闂? 鏄叏鐞冩爣鍑嗘椂闂?
      
      SYSTEMTIME stUTC;
      GetSystemTime(&stUTC);
      TCHAR chBuf[nBufSize];
      wsprintf(chBuf,_T("UTC: %u/%u/%u %u:%u:%u:%u %d\r\n"),             
                  stUTC.wYear, stUTC.wMonth, stUTC.wDay,
                  stUTC.wHour, stUTC.wMinute, stUTC.wSecond,
                  stUTC.wMilliseconds,stUTC.wDayOfWeek);

4. GetTickCount()

     GetTickCount()鑾峰彇鐨勬槸浠庤澶囧紑鏈哄悗鐨勬縐掓暟. 涓嶅寘鎷郴緇熺殑鎸傝搗鏃墮棿.

      涓昏鐨勫簲鐢?
          dwOldTime = GetTickCount();
          DoSomeThing();
          dwTimeElapsed = GetTickCount() - dwOldTime;
      鑾峰彇鏌愭紼嬪簭鎵ц鎵闇鐨勬椂闂?

5. 鏇村ソ鐨勫姙娉曪細“now鍑芥暟”
    渚嬪錛歠ormatdatetime('yyyy ''騫?' m ''鏈?' d ''鏃?'dddd '+'hh:mm:ssAM/PM',now);
    杈撳嚭緇撴灉錛?2001騫?鏈?鏃ユ槦鏈熶竴19錛?5錛?0 PM

]]>
VC 涓璫lw銆乶cb銆乤ps鏂囦歡鐨勪綔鐢?/title><link>http://m.shnenglu.com/gtwdaizi/articles/43370.html</link><dc:creator>閮ぉ鏂?/dc:creator><author>閮ぉ鏂?/author><pubDate>Thu, 28 Feb 2008 01:13:00 GMT</pubDate><guid>http://m.shnenglu.com/gtwdaizi/articles/43370.html</guid><wfw:comment>http://m.shnenglu.com/gtwdaizi/comments/43370.html</wfw:comment><comments>http://m.shnenglu.com/gtwdaizi/articles/43370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/gtwdaizi/comments/commentRss/43370.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/gtwdaizi/services/trackbacks/43370.html</trackback:ping><description><![CDATA[<div id="hvzpftn" class=tit> </div> <table style="TABLE-LAYOUT: fixed"> <tbody> <tr> <td> <div id="hvzpftn" class=cnt> <p><br>.clw鏂囦歡璁板綍浜嗙被鐨勪俊鎭紝濡傛灉classView涓煇涓被涓嶈浜嗭紝閲嶆柊鐢熸垚璇ユ枃浠跺氨鍙互浜嗭紝鏂規硶錛氬垹闄ゆ鏂囦歡錛岀偣鍑?#8220;寤虹珛綾誨悜瀵?#8221;錛屾牴鎹彁紺鴻緭鍏ュ伐紼嬪悕縐板氨鍙互浜嗭紱</p> <p><br>.ncb鏂囦歡璁板綍浜嗙被鐨勬彁紺轟俊鎭紝濡傛灉綾葷殑鎴愬憳鍑芥暟鍜屽彉閲忕殑鎻愮ず涓嶈浜嗭紝閲嶆柊鐢熸垚璇ユ枃浠跺嵆鍙紝鏂規硶鍚屼笂錛?<br><br>.aps鏂囦歡璁板綍浜嗚祫婧愪俊鎭紝瑕佸埄鐢ㄧ幇鎴愮殑璧勬簮錛岄渶瑕佷慨鏀?涓枃浠訛紝.rc鏂囦歡錛孯esource.h鏂囦歡鍜?aps鏂囦歡錛?aps鐩存帴鍒犻櫎鍚庯紝榪涘叆紼嬪簭錛孷C浼氳嚜鍔ㄧ敓鎴愩?/p> </div> </td> </tr> </tbody> </table> <img src ="http://m.shnenglu.com/gtwdaizi/aggbug/43370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/gtwdaizi/" target="_blank">閮ぉ鏂?/a> 2008-02-28 09:13 <a href="http://m.shnenglu.com/gtwdaizi/articles/43370.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>CString 鎿嶄綔鎸囧崡http://m.shnenglu.com/gtwdaizi/articles/42953.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Tue, 19 Feb 2008 09:30:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/42953.htmlhttp://m.shnenglu.com/gtwdaizi/comments/42953.htmlhttp://m.shnenglu.com/gtwdaizi/articles/42953.html#Feedback0http://m.shnenglu.com/gtwdaizi/comments/commentRss/42953.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/42953.html鍘熸枃鍑哄錛?a target=_blank>codeproject錛欳String Management


閫氳繃闃呰鏈枃浣犲彲浠ュ涔犲浣曟湁鏁堝湴浣跨敤 CString銆?br>
銆銆CString 鏄竴縐嶅緢鏈夌敤鐨勬暟鎹被鍨嬨傚畠浠緢澶х▼搴︿笂綆鍖栦簡MFC涓殑璁稿鎿嶄綔錛屼嬌寰桵FC鍦ㄥ仛瀛楃涓叉搷浣滅殑鏃跺欐柟渚夸簡寰堝銆備笉綆℃庢牱錛屼嬌鐢–String鏈夊緢澶氱壒孌婄殑鎶宸э紝鐗瑰埆鏄浜庣函C鑳屾櫙涓嬭蛋鍑烘潵鐨勭▼搴忓憳鏉ヨ鏈夌偣闅句互瀛︿範銆傝繖綃囨枃绔犲氨鏉ヨ璁鴻繖浜涙妧宸с?br>銆銆浣跨敤CString鍙互璁╀綘瀵瑰瓧絎︿覆鐨勬搷浣滄洿鍔犵洿鎴簡褰撱傝繖綃囨枃绔犱笉鏄疌String鐨勫畬鍏ㄦ墜鍐岋紝浣嗗泭鎷簡澶ч儴鍒嗗父瑙佸熀鏈棶棰樸?br>
榪欑瘒鏂囩珷鍖呮嫭浠ヤ笅鍐呭錛?

  1. CString 鍨嬭漿鍖栨垚 int 鍨?/font>

  2. char* 杞寲鎴?CString
  3. CString 杞寲鎴?char* 涔嬩竴錛氫嬌鐢↙PCTSTR寮哄埗杞寲
  4. CString 杞寲鎴?char* 涔嬩簩錛氫嬌鐢–String瀵硅薄鐨凣etBuffer鏂規硶
  5. CString 杞寲鎴?char* 涔嬩笁: 鍜屾帶浠剁殑鎺ュ彛
  6. BSTR 鍨嬭漿鍖栨垚 CString 鍨?/font>錛?
  7. CString 鍜屼復鏃跺璞?/font>錛?
  8. 1銆?strong>

    瑕佹瘮鐢ㄤ笅闈㈢殑鏂規硶濂藉緱澶氾細

    char gray[] = "Gray";char cat[] = "Cat";char * graycat = malloc(strlen(gray) + strlen(cat) + 1);strcpy(graycat, gray);strcat(graycat, cat);

    2銆?strong>鏍煎紡鍖栧瓧絎︿覆

    銆銆涓庡叾鐢?sprintf() 鍑芥暟鎴?wsprintf() 鍑芥暟鏉ユ牸寮忓寲涓涓瓧絎︿覆錛岃繕涓嶅鐢?CString 瀵硅薄鐨凢ormat()鏂規硶錛?/p>

    CString s;s.Format(_T("The total is %d"), total);

    銆銆鐢ㄨ繖縐嶆柟娉曠殑濂藉鏄綘涓嶇敤鎷呭績鐢ㄦ潵瀛樻斁鏍煎紡鍖栧悗鏁版嵁鐨勭紦鍐插尯鏄惁瓚沖澶э紝榪欎簺宸ヤ綔鐢盋String綾繪浛浣犲畬鎴愩?br>銆銆鏍煎紡鍖栨槸涓縐嶆妸鍏跺畠涓嶆槸瀛楃涓茬被鍨嬬殑鏁版嵁杞寲涓篊String綾誨瀷鐨勬渶甯哥敤鎶宸э紝姣斿錛屾妸涓涓暣鏁拌漿鍖栨垚CString綾誨瀷錛屽彲鐢ㄥ涓嬫柟娉曪細

    CString s;s.Format(_T("%d"), total);

    銆銆鎴戞繪槸瀵規垜鐨勫瓧絎︿覆浣跨敤_T()瀹忥紝榪欐槸涓轟簡璁╂垜鐨勪唬鐮佽嚦灝戞湁Unicode鐨勬剰璇嗭紝褰撶劧錛屽叧浜嶶nicode鐨勮瘽棰樹笉鍦ㄨ繖綃囨枃绔犵殑璁ㄨ鑼冨洿銆俖T()瀹忓湪8浣嶅瓧絎︾幆澧冧笅鏄涓嬪畾涔夌殑錛?/p>

    #define _T(x) x // 闈濽nicode鐗堟湰錛坣on-Unicode version錛?/pre>
    

    鑰屽湪Unicode鐜涓嬫槸濡備笅瀹氫箟鐨勶細

    #define _T(x) L##x // Unicode鐗堟湰錛圲nicode version錛?/pre>
    

    鎵浠ュ湪Unicode鐜涓嬶紝瀹冪殑鏁堟灉灝辯浉褰撲簬錛?/p>

    s.Format(L"%d", total);

    銆銆濡傛灉浣犺涓轟綘鐨勭▼搴忓彲鑳藉湪Unicode鐨勭幆澧冧笅榪愯錛岄偅涔堝紑濮嬪湪鎰忕敤 Unicode 緙栫爜銆傛瘮濡傝錛屼笉瑕佺敤 sizeof() 鎿嶄綔絎︽潵鑾峰緱瀛楃涓茬殑闀垮害錛屽洜涓哄湪Unicode鐜涓嬪氨浼氭湁2鍊嶇殑璇樊銆傛垜浠彲浠ョ敤涓浜涙柟娉曟潵闅愯棌Unicode鐨勪竴浜涚粏鑺傦紝姣斿鍦ㄦ垜闇瑕佽幏寰楀瓧絎﹂暱搴︾殑鏃跺欙紝鎴戜細鐢ㄤ竴涓彨鍋欴IM鐨勫畯錛岃繖涓畯鏄湪鎴戠殑dim.h鏂囦歡涓畾涔夌殑錛屾垜浼氬湪鎴戝啓鐨勬墍鏈夌▼搴忎腑閮藉寘鍚繖涓枃浠訛細

    #define DIM(x) ( sizeof((x)) / sizeof((x)[0]) )
    銆銆榪欎釜瀹忎笉浠呭彲浠ョ敤鏉ヨВ鍐砋nicode鐨勫瓧絎︿覆闀垮害鐨勯棶棰橈紝涔熷彲浠ョ敤鍦ㄧ紪璇戞椂瀹氫箟鐨勮〃鏍間笂錛屽畠鍙互鑾峰緱琛ㄦ牸鐨勯」鏁幫紝濡備笅錛?br>
    class Whatever { ... };Whatever data[] = {   { ... },    ...   { ... },};for(int i = 0; i < DIM(data); i++) // 鎵弿琛ㄦ牸瀵繪壘鍖歸厤欏廣?/pre>
    銆銆榪欓噷瑕佹彁閱掍綘鐨勫氨鏄竴瀹氳娉ㄦ剰閭d簺鍦ㄥ弬鏁頒腑闇瑕佺湡瀹炲瓧鑺傛暟鐨凙PI鍑芥暟璋冪敤錛屽鏋滀綘浼犻掑瓧絎︿釜鏁扮粰瀹冿紝瀹冨皢涓嶈兘姝e父宸ヤ綔銆傚涓嬶細
    
    TCHAR data[20];lstrcpyn(data, longstring, sizeof(data) - 1); // WRONG!lstrcpyn(data, longstring, DIM(data) - 1); // RIGHTWriteFile(f, data, DIM(data), &bytesWritten, NULL); // WRONG!WriteFile(f, data, sizeof(data), &bytesWritten, NULL); // RIGHT

    閫犳垚浠ヤ笂鍘熷洜鏄洜涓簂strcpyn闇瑕佷竴涓瓧絎︿釜鏁頒綔涓哄弬鏁幫紝浣嗘槸WriteFile鍗撮渶瑕佸瓧鑺傛暟浣滀負鍙傛暟銆?br>鍚屾牱闇瑕佹敞鎰忕殑鏄湁鏃跺欓渶瑕佸啓鍑烘暟鎹殑鎵鏈夊唴瀹廣傚鏋滀綘浠呬粎鍙兂鍐欏嚭鏁版嵁鐨勭湡瀹為暱搴︼紝浣犲彲鑳戒細璁や負浣犲簲璇ヨ繖鏍峰仛錛?/p>

    WriteFile(f, data, lstrlen(data), &bytesWritten, NULL); // WRONG

    浣嗘槸鍦║nicode鐜涓嬶紝瀹冧笉浼氭甯稿伐浣溿傛紜殑鍋氭硶搴旇鏄繖鏍鳳細

    WriteFile(f, data, lstrlen(data) * sizeof(TCHAR), &bytesWritten, NULL); // RIGHT

    銆銆鍥犱負WriteFile闇瑕佺殑鏄竴涓互瀛楄妭涓哄崟浣嶇殑闀垮害銆傦紙鍙兘鏈変簺浜轟細鎯?#8220;鍦ㄩ潪Unicode鐨勭幆澧冧笅榪愯榪欒浠g爜錛屽氨鎰忓懗鐫鎬繪槸鍦ㄥ仛涓涓浣欑殑涔?鎿嶄綔錛岃繖鏍蜂笉浼氶檷浣庣▼搴忕殑鏁堢巼鍚楋紵”榪欑鎯蟲硶鏄浣欑殑錛屼綘蹇呴』瑕佷簡瑙g紪璇戝櫒瀹為檯涓婂仛浜嗕粈涔堬紝娌℃湁鍝竴涓狢鎴朇++緙栬瘧鍣ㄤ細鎶婅繖縐嶆棤鑱婄殑涔?鎿嶄綔鐣欏湪浠g爜涓傚湪Unicode鐜涓嬭繍琛岀殑鏃跺欙紝浣犱篃涓嶅繀鎷呭績閭d釜涔?鎿嶄綔浼氶檷浣庣▼搴忕殑鏁堢巼錛岃浣忥紝榪欏彧鏄竴涓乏縐諱竴浣嶇殑鎿嶄綔鑰屽凡錛岀紪璇戝櫒涔熷緢涔愭剰涓轟綘鍋氳繖縐嶆浛鎹€傦級
    銆銆浣跨敤_T瀹忓茍涓嶆槸鎰忓懗鐫浣犲凡緇忓垱寤轟簡涓涓猆nicode鐨勭▼搴忥紝浣犲彧鏄垱寤轟簡涓涓湁Unicode鎰忚瘑鐨勭▼搴忚屽凡銆傚鏋滀綘鍦ㄩ粯璁ょ殑8-bit妯″紡涓嬬紪璇戜綘鐨勭▼搴忕殑璇濓紝寰楀埌鐨勫皢鏄竴涓櫘閫氱殑8-bit鐨勫簲鐢ㄧ▼搴忥紙榪欓噷鐨?-bit鎸囩殑鍙槸8浣嶇殑瀛楃緙栫爜錛屽茍涓嶆槸鎸?浣嶇殑璁$畻鏈虹郴緇燂級錛涘綋浣犲湪Unicode鐜涓嬬紪璇戜綘鐨勭▼搴忔椂錛屼綘鎵嶄細寰楀埌涓涓猆nicode鐨勭▼搴忋傝浣忥紝CString 鍦?Unicode 鐜涓嬶紝閲岄潰鍖呭惈鐨勫彲閮芥槸16浣嶇殑瀛楃鍝︺?br>
    3銆?strong>

    4銆?strong>

    鎴栬呰繖鏍鳳細

    CString graycat("Gray" + "Cat");

    銆銆浜嬪疄涓婏紝緙栬瘧鍣ㄥ皢鎶辨ㄤ笂闈㈢殑榪欎簺灝濊瘯銆備負浠涔堝憿錛熷洜涓洪拡瀵笴String 鍜?LPCTSTR鏁版嵁綾誨瀷鐨勫悇縐嶅悇鏍風殑緇勫悎錛?#8220; +” 榪愮畻絎?琚畾涔夋垚涓涓噸杞芥搷浣滅銆傝屼笉鏄袱涓?LPCTSTR 鏁版嵁綾誨瀷錛屽畠鏄簳灞傛暟鎹被鍨嬨備綘涓嶈兘瀵瑰熀鏈暟鎹紙濡?int銆乧har 鎴栬?char*錛夌被鍨嬮噸杞?C++ 鐨勮繍綆楃銆備綘鍙互璞′笅闈㈣繖鏍峰仛錛?/p>

    CString graycat = CString("Gray") + CString("Cat");

    鎴栬呰繖鏍鳳細

    CString graycat = CString("Gray") + "Cat";

    鐮旂┒涓鐣氨浼氬彂鐜幫細“ +”鎬繪槸浣跨敤鍦ㄨ嚦灝戞湁涓涓?CString 瀵硅薄鍜屼竴涓?LPCSTR 鐨勫満鍚堛?br>
    娉ㄦ剰錛岀紪鍐欐湁 Unicode 鎰忚瘑鐨勪唬鐮佹繪槸涓浠跺ソ浜嬶紝姣斿錛?/p>

    CString graycat = CString(_T("Gray")) + _T("Cat");

    榪欏皢浣垮緱浣犵殑浠g爜鍙互鐩存帴縐繪銆?br>
    char* 杞寲涓?CString

    銆銆鐜板湪浣犳湁涓涓?char* 綾誨瀷鐨勬暟鎹紝鎴栬呰涓涓瓧絎︿覆銆傛庝箞鏍峰垱寤?CString 瀵硅薄鍛紵榪欓噷鏈変竴浜涗緥瀛愶細

    char * p = "This is a test";

    鎴栬呰薄涓嬮潰榪欐牱鏇村叿鏈?Unicode 鎰忚瘑錛?/p>

    TCHAR * p = _T("This is a test")

    鎴?/p>

    LPTSTR p = _T("This is a test");

    浣犲彲浠ヤ嬌鐢ㄤ笅闈換鎰忎竴縐嶅啓娉曪細

    CString s = "This is a test"; // 8-bit onlyCString s = _T("This is a test"); // Unicode-awareCString s("This is a test"); // 8-bit onlyCString s(_T("This is a test")); // Unicode-awareCString s = p;CString s(p);

    銆銆鐢ㄨ繖浜涙柟娉曞彲浠ヨ交鏉懼皢甯擱噺瀛楃涓叉垨鎸囬拡杞崲鎴?CString銆傞渶瑕佹敞鎰忕殑鏄紝瀛楃鐨勮祴鍊兼繪槸琚嫹璐濆埌 CString 瀵硅薄涓幓鐨勶紝鎵浠ヤ綘鍙互璞′笅闈㈣繖鏍鋒搷浣滐細

    TCHAR * p = _T("Gray");CString s(p);p = _T("Cat");s += p;

    緇撴灉瀛楃涓茶偗瀹氭槸“GrayCat”銆?br>
    CString 綾昏繕鏈夊嚑涓叾瀹冪殑鏋勯犲嚱鏁幫紝浣嗘槸榪欓噷鎴戜滑涓嶈冭檻瀹冿紝濡傛灉浣犳湁鍏磋叮鍙互鑷繁鏌ョ湅鐩稿叧鏂囨。銆?br>
    浜嬪疄涓婏紝CString 綾葷殑鏋勯犲嚱鏁版瘮鎴戝睍紺虹殑瑕佸鏉傦紝姣斿錛?/p>

    CString s = "This is a test"; 

    銆銆榪欐槸寰堣崏鐜囩殑緙栫爜錛屼絾鏄疄闄呬笂瀹冨湪 Unicode 鐜涓嬭兘緙栬瘧閫氳繃銆傚畠鍦ㄨ繍琛屾椂璋冪敤鏋勯犲嚱鏁扮殑 MultiByteToWideChar 鎿嶄綔灝?8 浣嶅瓧絎︿覆杞崲鎴?16 浣嶅瓧絎︿覆銆備笉綆℃庢牱錛屽鏋?char * 鎸囬拡鏄綉緇滀笂浼犺緭鐨?8 浣嶆暟鎹紝榪欑杞崲鏄緢鏈夌敤鐨勩?br>
    CString 杞寲鎴?char* 涔嬩竴錛?/strong>寮哄埗綾誨瀷杞崲涓?LPCTSTR錛?br>
    銆銆榪欐槸涓縐嶇暐寰‖鎬х殑杞崲錛屾湁鍏?#8220;姝g‘”鐨勫仛娉曪紝浜轟滑鍦ㄨ璇嗕笂榪樺瓨鍦ㄨ澶氭販涔憋紝姝g‘鐨勪嬌鐢ㄦ柟娉曟湁寰堝錛屼絾閿欒鐨勪嬌鐢ㄦ柟娉曞彲鑳戒笌姝g‘鐨勪嬌鐢ㄦ柟娉曚竴鏍峰銆?br>銆銆鎴戜滑棣栧厛瑕佷簡瑙?CString 鏄竴縐嶅緢鐗規畩鐨?C++ 瀵硅薄錛屽畠閲岄潰鍖呭惈浜嗕笁涓鹼細涓涓寚鍚戞煇涓暟鎹紦鍐插尯鐨勬寚閽堛佷竴涓槸璇ョ紦鍐蹭腑鏈夋晥鐨勫瓧絎﹁鏁頒互鍙婁竴涓紦鍐插尯闀垮害銆?鏈夋晥瀛楃鏁扮殑澶у皬鍙互鏄粠0鍒拌緙撳啿鏈澶ч暱搴﹀煎噺1涔嬮棿鐨勪換浣曟暟錛堝洜涓哄瓧絎︿覆緇撳熬鏈変竴涓狽ULL瀛楃錛夈傚瓧絎﹁鏁板拰緙撳啿鍖洪暱搴﹁宸у闅愯棌銆?br>銆銆闄ら潪浣犲仛涓浜涚壒孌婄殑鎿嶄綔錛屽惁鍒欎綘涓嶅彲鑳界煡閬撶粰CString瀵硅薄鍒嗛厤鐨勭紦鍐插尯鐨勯暱搴︺傝繖鏍鳳紝鍗充嬌浣犺幏寰椾簡璇?緙撳啿鐨勫湴鍧錛屼綘涔熸棤娉曟洿鏀瑰叾涓殑鍐呭錛屼笉鑳芥埅鐭瓧絎︿覆錛屼篃 緇濆娌℃湁鍔炴硶鍔犻暱瀹冪殑鍐呭錛屽惁鍒欑涓鏃墮棿灝變細鐪嬪埌婧㈠嚭銆?br>銆銆LPCTSTR 鎿嶄綔絎︼紙鎴栬呮洿鏄庣‘鍦拌灝辨槸 TCHAR * 鎿嶄綔絎︼級鍦?CString 綾諱腑琚噸杞戒簡錛岃鎿嶄綔絎︾殑瀹氫箟鏄繑鍥炵紦鍐插尯鐨勫湴鍧錛屽洜姝わ紝濡傛灉浣犻渶瑕佷竴涓寚鍚?CString 鐨?瀛楃涓叉寚閽堢殑璇濓紝鍙互榪欐牱鍋氾細

     

    CString s("GrayCat");LPCTSTR p = s;

    銆銆瀹冨彲浠ユ紜湴榪愯銆傝繖鏄敱C璇█鐨勫己鍒剁被鍨嬭漿鍖栬鍒欏疄鐜扮殑銆傚綋闇瑕佸己鍒剁被鍨嬭漿鍖栨椂錛孋++瑙勬祴瀹硅榪欑閫夋嫨銆傛瘮濡傦紝浣犲彲浠ュ皢錛堟誕鐐規暟錛夊畾涔変負灝嗘煇涓鏁?錛堟湁涓瀵規誕鐐規暟錛夎繘琛屽己鍒剁被鍨嬭漿鎹㈠悗鍙繑鍥炶澶嶆暟鐨勭涓涓誕鐐規暟錛堜篃灝辨槸鍏跺疄閮級銆傚彲浠ヨ薄涓嬮潰榪欐牱錛?/p>

    Complex c(1.2f, 4.8f);float realpart = c;

    濡傛灉(float)鎿嶄綔絎﹀畾涔夋紜殑璇濓紝閭d箞瀹為儴鐨勭殑鍊煎簲璇ユ槸1.2銆?br>銆銆榪欑寮哄埗杞寲閫傚悎鎵鏈夎繖縐嶆儏鍐碉紝渚嬪錛屼換浣曞甫鏈?LPCTSTR 綾誨瀷鍙傛暟鐨勫嚱鏁伴兘浼氬己鍒舵墽琛岃繖縐嶈漿鎹€?浜庢槸錛屼綘鍙兘鏈夎繖鏍蜂竴涓嚱鏁幫紙涔熻鍦ㄦ煇涓綘涔版潵鐨凞LL涓級錛?/p>

    BOOL DoSomethingCool(LPCTSTR s);

    浣犺薄涓嬮潰榪欐牱璋冪敤瀹冿細

    CString file("c:\\myfiles\\coolstuff")BOOL result = DoSomethingCool(file);

    銆銆瀹冭兘姝g‘榪愯銆傚洜涓?DoSomethingCool 鍑芥暟宸茬粡璇存槑浜嗛渶瑕佷竴涓?LPCTSTR 綾誨瀷鐨勫弬鏁幫紝鍥犳 LPCTSTR 琚簲鐢ㄤ簬璇ュ弬鏁幫紝鍦?MFC 涓氨鏄繑鍥炵殑涓插湴鍧銆?br>
    濡傛灉浣犺鏍煎紡鍖栧瓧絎︿覆鎬庝箞鍔炲憿錛?/p>

    CString graycat("GrayCat");CString s;s.Format("Mew! I love %s", graycat);

    銆銆娉ㄦ剰鐢變簬鍦ㄥ彲鍙樺弬鏁板垪琛ㄤ腑鐨勫鹼紙鍦ㄥ嚱鏁拌鏄庝腑鏄互“...”琛ㄧず鐨勶級騫舵病鏈夐殣鍚竴涓己鍒剁被鍨嬭漿鎹㈡搷浣滅銆備綘浼氬緱鍒頒粈涔堢粨鏋滃憿錛?br>銆銆涓涓護浜烘儕璁剁殑緇撴灉錛屾垜浠緱鍒扮殑瀹為檯緇撴灉涓叉槸錛?/p>

    "Mew! I love GrayCat"銆?/pre>
    

    銆銆鍥犱負 MFC 鐨勮璁¤呬滑鍦ㄨ璁?CString 鏁版嵁綾誨瀷鏃墮潪甯稿皬蹇冿紝 CString 綾誨瀷琛ㄨ揪寮忔眰鍊煎悗鎸囧悜浜嗗瓧絎︿覆錛屾墍浠ヨ繖閲岀湅涓嶅埌浠諱綍璞?Format 鎴?sprintf 涓殑寮哄埗綾誨瀷杞崲錛屼綘浠嶇劧鍙互寰楀埌姝g‘鐨勮涓恒傛弿榪?CString 鐨勯檮鍔犳暟鎹疄闄呬笂鍦?CString 鍚嶄箟鍦板潃涔嬪悗銆?br>銆銆鏈変竴浠朵簨鎯呬綘鏄笉鑳藉仛鐨勶紝閭e氨鏄慨鏀瑰瓧絎︿覆銆傛瘮濡傦紝浣犲彲鑳戒細灝濊瘯鐢?#8220;,”浠f浛“.”錛堜笉瑕佸仛榪欐牱鐨勶紝濡傛灉浣犲湪涔庡浗闄呭寲闂錛屼綘搴旇浣跨敤鍗佽繘鍒惰漿鎹㈢殑 National Language Support 鐗規э紝錛夛紝涓嬮潰鏄釜綆鍗曠殑渚嬪瓙錛?/p>

    CString v("1.00"); // 璐у竵閲戦錛屼袱浣嶅皬鏁癓PCTSTR p = v;p[lstrlen(p) - 3] = '','';

    銆銆榪欐椂緙栬瘧鍣ㄤ細鎶ラ敊錛屽洜涓轟綘璧嬪間簡涓涓父閲忎覆銆傚鏋滀綘鍋氬涓嬪皾璇曪紝緙栬瘧鍣ㄤ篃浼氶敊錛?/p>

    strcat(p, "each");

    銆銆鍥犱負 strcat 鐨勭涓涓弬鏁板簲璇ユ槸 LPTSTR 綾誨瀷鐨勬暟鎹紝鑰屼綘鍗寸粰浜嗕竴涓?LPCTSTR銆?br>
    銆銆涓嶈璇曞浘閽昏繖涓敊璇秷鎭殑鐗涜灝栵紝榪欏彧浼氫嬌浣犺嚜宸遍櫡鍏ラ夯鐑︼紒

    銆銆鍘熷洜鏄紦鍐叉湁涓涓鏁幫紝瀹冩槸涓嶅彲瀛樺彇鐨勶紙瀹冧綅浜?CString 鍦板潃涔嬩笅鐨勪竴涓殣钘忓尯鍩燂級錛屽鏋滀綘鏀瑰彉榪欎釜涓詫紝緙撳啿涓殑瀛楃璁℃暟涓嶄細鍙嶆槧鎵鍋氱殑淇敼銆傛澶栵紝濡傛灉瀛楃涓查暱搴︽伆濂芥槸璇ュ瓧絎︿覆鐗╃悊闄愬埗鐨勯暱搴︼紙姊㈠悗榪樹細璁插埌榪欎釜闂錛夛紝閭d箞鎵╁睍璇ュ瓧絎︿覆灝嗘敼鍐欑紦鍐蹭互澶栫殑浠諱綍鏁版嵁錛岄偅鏄綘鏃犳潈榪涜鍐欐搷浣滅殑鍐呭瓨錛堜笉瀵瑰悧錛燂級錛屼綘浼氭瘉鎹㈠潖涓嶅睘浜庝綘鐨勫唴瀛樸傝繖鏄簲鐢ㄧ▼搴忕湡姝g殑姝諱骸澶勬柟銆?/p>

    CString杞寲鎴恈har* 涔嬩簩錛?/strong>浣跨敤 CString 瀵硅薄鐨?GetBuffer 鏂規硶錛?br>
    銆銆濡傛灉浣犻渶瑕佷慨鏀?CString 涓殑鍐呭錛屽畠鏈変竴涓壒孌婄殑鏂規硶鍙互浣跨敤錛岄偅灝辨槸 GetBuffer錛屽畠鐨勪綔鐢ㄦ槸榪斿洖涓涓彲鍐欑殑緙撳啿鎸囬拡銆?濡傛灉浣犲彧鏄墦綆椾慨鏀瑰瓧絎︽垨鑰呮埅鐭瓧絎︿覆錛屼綘瀹屽叏鍙互榪欐牱鍋氾細

    CString s(_T("File.ext"));LPTSTR p = s.GetBuffer();LPTSTR dot = strchr(p, ''.''); // OK, should have used s.Find...if(p != NULL)*p = _T(''\0'');s.ReleaseBuffer();

    銆銆榪欐槸 GetBuffer 鐨勭涓縐嶇敤娉曪紝涔熸槸鏈綆鍗曠殑涓縐嶏紝涓嶇敤緇欏畠浼犻掑弬鏁幫紝瀹冧嬌鐢ㄩ粯璁ゅ?0錛屾剰鎬濇槸錛?#8220;緇欐垜榪欎釜瀛楃涓茬殑鎸囬拡錛屾垜淇濊瘉涓嶅姞闀垮畠”銆傚綋浣犺皟鐢?ReleaseBuffer 鏃訛紝瀛楃涓茬殑瀹為檯闀垮害浼氳閲嶆柊璁$畻錛岀劧鍚庡瓨鍏?CString 瀵硅薄涓?br>銆銆蹇呴』寮鴻皟涓鐐癸紝鍦?GetBuffer 鍜?ReleaseBuffer 涔嬮棿榪欎釜鑼冨洿錛屼竴瀹氫笉鑳戒嬌鐢ㄤ綘瑕佹搷浣滅殑榪欎釜緙撳啿鐨?CString 瀵硅薄鐨勪換浣曟柟娉曘傚洜涓?ReleaseBuffer 琚皟鐢ㄤ箣鍓嶏紝璇?CString 瀵硅薄鐨勫畬鏁存у緱涓嶅埌淇濋殰銆傜爺絀朵互涓嬩唬鐮侊細

    CString s(...);LPTSTR p = s.GetBuffer();//... 榪欎釜鎸囬拡 p 鍙戠敓浜嗗緢澶氫簨鎯卛nt n = s.GetLength(); // 寰堢碂D!!!!! 鏈夊彲鑳界粰鍑洪敊璇殑絳旀!!!s.TrimRight(); // 寰堢碂!!!!! 涓嶈兘淇濊瘉鑳芥甯稿伐浣?!!!s.ReleaseBuffer(); // 鐜板湪搴旇 OKint m = s.GetLength(); // 榪欎釜緇撴灉鍙互淇濊瘉鏄紜殑銆俿.TrimRight(); // 灝嗘甯稿伐浣溿?/pre>
    

    銆銆鍋囪浣犳兂澧炲姞瀛楃涓茬殑闀垮害錛屼綘棣栧厛瑕佺煡閬撹繖涓瓧絎︿覆鍙兘浼氭湁澶氶暱錛屽ソ姣旀槸澹版槑瀛楃涓叉暟緇勭殑鏃跺欑敤錛?/p>

    char buffer[1024];

    琛ㄧず 1024 涓瓧絎︾┖闂磋凍浠ヨ浣犲仛浠諱綍鎯沖仛寰椾簨鎯呫傚湪 CString 涓笌涔嬫剰涔夌浉絳夌殑琛ㄧず娉曪細

    LPTSTR p = s.GetBuffer(1024);

    銆銆璋冪敤榪欎釜鍑芥暟鍚庯紝浣犱笉浠呰幏寰椾簡瀛楃涓茬紦鍐插尯鐨勬寚閽堬紝鑰屼笖鍚屾椂榪樿幏寰椾簡闀垮害鑷沖皯涓?1024 涓瓧絎︾殑絀洪棿錛堟敞鎰忥紝鎴戣鐨勬槸“瀛楃”錛岃屼笉鏄?#8220;瀛楄妭”錛屽洜涓?CString 鏄互闅愬惈鏂瑰紡鎰熺煡 Unicode 鐨勶級銆?br>銆銆鍚屾椂錛岃繕搴旇娉ㄦ剰鐨勬槸錛屽鏋滀綘鏈変竴涓父閲忎覆鎸囬拡錛岃繖涓覆鏈韓鐨勫艱瀛樺偍鍦ㄥ彧璇誨唴瀛樹腑錛屽鏋滆瘯鍥懼瓨鍌ㄥ畠錛屽嵆浣夸綘宸茬粡璋冪敤浜?GetBuffer 錛屽茍鑾峰緱涓涓彧璇誨唴瀛樼殑鎸囬拡錛屽瓨鍏ユ搷浣滀細澶辮觸錛屽茍鎶ュ憡瀛樺彇閿欒銆傛垜娌℃湁鍦?CString 涓婅瘉鏄庤繖涓鐐癸紝浣嗘垜鐪嬪埌榪囧ぇ鎶婄殑 C 紼嬪簭鍛樼粡甯哥姱榪欎釜閿欒銆?br>銆銆C 紼嬪簭鍛樻湁涓涓氱梾鏄垎閰嶄竴涓浐瀹氶暱搴︾殑緙撳啿錛屽瀹冭繘琛?sprintf 鎿嶄綔錛岀劧鍚庡皢瀹冭祴鍊肩粰涓涓?CString錛?/p>

    char buffer[256];sprintf(buffer, "%......", args, ...); // ... 閮ㄥ垎鐪佺暐璁稿緇嗚妭CString s = buffer;

    铏界劧鏇村ソ鐨勫艦寮忓彲浠ヨ繖涔堝仛錛?/p>

    CString s;s.Format(_T("%...."), args, ...);

    濡傛灉浣犵殑瀛楃涓查暱搴︿竾涓瓚呰繃 256 涓瓧絎︾殑鏃跺欙紝涓嶄細鐮村潖鍫嗘爤銆?br>
    銆銆鍙﹀涓涓父瑙佺殑閿欒鏄細鏃㈢劧鍥哄畾澶у皬鐨勫唴瀛樹笉宸ヤ綔錛岄偅涔堝氨閲囩敤鍔ㄦ佸垎閰嶅瓧鑺傦紝榪欑鍋氭硶寮婄鏇村ぇ錛?/p>

    int len = lstrlen(parm1) + 13  lstrlen(parm2) + 10 + 100;char * buffer = new char[len];sprintf(buffer, "%s is equal to %s, valid data", parm1, parm2);CString s = buffer;......delete [] buffer;

    瀹冨彲浠ヨ兘琚畝鍗曞湴鍐欐垚錛?/p>

    CString s;s.Format(_T("%s is equal to %s, valid data"), parm1, parm2);

    銆銆闇瑕佹敞鎰?sprintf 渚嬪瓙閮戒笉鏄?Unicode 灝辯華鐨勶紝灝界浣犲彲浠ヤ嬌鐢?tsprintf 浠ュ強鐢?_T() 鏉ュ寘鍥存牸寮忓寲瀛楃涓詫紝浣嗘槸鍩烘湰 鎬濊礬浠嶇劧鏄湪璧板集璺紝榪欒繖鏍峰緢瀹規槗鍑洪敊銆?br>
    CString to char * 涔嬩笁錛?/strong>鍜屾帶浠剁殑鎺ュ彛錛?br>
    銆銆鎴戜滑緇忓父闇瑕佹妸涓涓?CString 鐨勫間紶閫掔粰涓涓帶浠訛紝姣斿錛孋TreeCtrl銆侻FC涓烘垜浠彁渚涗簡寰堝渚垮埄鏉ラ噸杞借繖涓搷浣滐紝浣嗘槸 鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝浣犱嬌鐢?#8220;鍘熷”褰㈠紡鐨勬洿鏂幫紝鍥犳闇瑕佸皢澧ㄦ煇涓覆鎸囬拡瀛樺偍鍒?TVINSERTITEMSTRUCT 緇撴瀯鐨?TVITEM 鎴愬憳涓傚涓嬶細

    TVINSERTITEMSTRUCT tvi;CString s;// ... 涓簊璧嬩竴浜涘箋倀vi.item.pszText = s; // Compiler yells at you here// ... 濉啓tvi鐨勫叾浠栧煙HTREEITEM ti = c_MyTree.InsertItem(&tvi);

    銆銆涓轟粈涔堢紪璇戝櫒浼氭姤閿欏憿錛熸槑鏄庣湅璧鋒潵寰堝畬緹庣殑鐢ㄦ硶鍟婏紒浣嗘槸浜嬪疄涓婂鏋滀綘鐪嬬湅 TVITEM 緇撴瀯鐨勫畾涔変綘灝變細鏄庣櫧錛屽湪 TVITEM 緇撴瀯涓?pszText 鎴愬憳鐨勫0鏄庡涓嬶細

    LPTSTR pszText;int cchTextMax;

    銆銆鍥犳錛岃祴鍊間笉鏄祴緇欎竴涓?LPCTSTR 綾誨瀷鐨勫彉閲忥紝鑰屼笖緙栬瘧鍣ㄦ棤娉曠煡閬撳浣曞皢璧嬪艱鍙ュ彸杈瑰己鍒惰漿鎹㈡垚 LPCTSTR銆傚ソ鍚э紝浣犺錛岄偅鎴戝氨鏀規垚榪欐牱錛?/p>

    tvi.item.pszText = (LPCTSTR)s; //緙栬瘧鍣ㄤ緷鐒朵細鎶ラ敊銆?/pre>
    

    銆銆緙栬瘧鍣ㄤ箣鎵浠ヤ緷鐒舵姤閿欐槸鍥犱負浣犺瘯鍥炬妸涓涓?LPCTSTR 綾誨瀷鐨勫彉閲忚祴鍊肩粰涓涓?LPTSTR 綾誨瀷鐨勫彉閲忥紝榪欑鎿嶄綔鍦–鎴朇++涓槸琚姝㈢殑銆備綘涓嶈兘鐢ㄨ繖縐嶆柟娉?鏉ユ互鐢ㄥ父閲忔寚閽堜笌闈炲父閲忔寚閽堟蹇碉紝鍚﹀垯錛屼細鎵頒貢緙栬瘧鍣ㄧ殑浼樺寲鏈哄埗錛屼嬌涔嬩笉鐭ュ浣曚紭鍖栦綘鐨勭▼搴忋傛瘮濡傦紝濡傛灉浣犺繖涔堝仛錛?/p>

    const int i = ...;//... do lots of stuff... = a[i]; // usage 1// ... lots more stuff... = a[i]; // usage 2

    銆銆閭d箞錛岀紪璇戝櫒浼氫互涓烘棦鐒?i 鏄?const 錛屾墍浠?usage1鍜寀sage2鐨勫兼槸鐩稿悓鐨勶紝騫朵笖瀹冪敋鑷寵兘浜嬪厛璁$畻濂?usage1 澶勭殑 a[i] 鐨勫湴鍧錛岀劧鍚庝繚鐣欑潃鍦ㄥ悗闈㈢殑 usage2 澶勪嬌鐢紝鑰屼笉鏄噸鏂拌綆椼傚鏋滀綘鎸夊涓嬫柟寮忓啓鐨勮瘽錛?/p>

    const int i = ...;int * p = &i;//... do lots of stuff... = a[i]; // usage 1// ... lots more stuff(*p)++; // mess over compiler''s assumption// ... and other stuff... = a[i]; // usage 2

    銆銆緙栬瘧鍣ㄥ皢璁や負 i 鏄父閲忥紝浠庤?a[i] 鐨勪綅緗篃鏄父閲忥紝榪欐牱闂存帴鍦扮牬鍧忎簡鍏堝墠鐨勫亣璁俱傚洜姝わ紝浣犵殑紼嬪簭灝嗕細鍦?debug 緙栬瘧妯″紡錛堟病鏈変紭鍖栵級鍜?release 緙栬瘧妯″紡錛堝畬鍏ㄤ紭鍖栵級涓弽鏄犲嚭涓嶅悓鐨勮涓猴紝榪欑鎯呭喌鍙笉濂斤紝鎵浠ュ綋浣犺瘯鍥炬妸鎸囧悜 i 鐨勬寚閽堣祴鍊肩粰涓涓?鍙慨鏀圭殑寮曠敤鏃訛紝浼氳緙栬瘧鍣ㄨ瘖鏂負榪欐槸涓縐嶄吉閫犮傝繖灝辨槸涓轟粈涔堬紙LPCTSTR錛夊己鍒剁被鍨嬭漿鍖栦笉璧蜂綔鐢ㄧ殑鍘熷洜銆?br>銆銆涓轟粈涔堜笉鎶婅鎴愬憳澹版槑鎴?LPCTSTR 綾誨瀷鍛紵鍥犱負榪欎釜緇撴瀯琚敤浜庤鍐欐帶浠躲傚綋浣犲悜鎺т歡鍐欐暟鎹椂錛屾枃鏈寚閽堝疄闄呬笂琚綋鎴?LPCTSTR錛岃屽綋浣犱粠鎺т歡璇繪暟鎹?鏃訛紝浣犲繀欏繪湁涓涓彲鍐欑殑瀛楃涓層傝繖涓粨鏋勬棤娉曞尯鍒嗗畠鏄敤鏉ヨ榪樻槸鐢ㄦ潵鍐欍?br>
    鍥犳錛屼綘浼氬父甯稿湪鎴戠殑浠g爜涓湅鍒板涓嬬殑鐢ㄦ硶錛?/p>

    tvi.item.pszText = (LPTSTR)(LPCTSTR)s;

    銆銆瀹冩妸 CString 寮哄埗綾誨瀷杞寲鎴?LPCTSTR錛屼篃灝辨槸璇村厛鑾峰緱鏀瑰瓧絎︿覆鐨勫湴鍧錛岀劧鍚庡啀寮哄埗綾誨瀷杞寲鎴?LPTSTR錛屼互渚垮彲浠ュ涔嬭繘琛岃祴鍊兼搷浣溿?娉ㄦ剰榪欏彧鏈夊湪浣跨敤 Set 鎴?Insert 涔嬬被鐨勬柟娉曟墠鏈夋晥錛佸鏋滀綘璇曞浘鑾峰彇鏁版嵁錛屽垯涓嶈兘榪欎箞鍋氥?br>銆銆濡傛灉浣犳墦綆楄幏鍙栧瓨鍌ㄥ湪鎺т歡涓殑鏁版嵁錛屽垯鏂規硶紼嶆湁涓嶅悓錛屼緥濡傦紝瀵規煇涓?CTreeCtrl 浣跨敤 GetItem 鏂規硶錛屾垜鎯寵幏鍙栭」鐩殑鏂囨湰銆傛垜鐭ラ亾榪欎簺 鏂囨湰鐨勯暱搴︿笉浼氳秴榪?MY_LIMIT錛屽洜姝ゆ垜鍙互榪欐牱鍐欙細

    TVITEM tvi;// ... assorted initialization of other fields of tvitvi.pszText = s.GetBuffer(MY_LIMIT);tvi.cchTextMax = MY_LIMIT;c_MyTree.GetItem(&tvi);s.ReleaseBuffer();

    銆銆鍙互鐪嬪嚭鏉ワ紝鍏跺疄涓婇潰鐨勪唬鐮佸鎵鏈夌被鍨嬬殑 Set 鏂規硶閮介傜敤錛屼絾鏄茍涓嶉渶瑕佽繖涔堝仛錛屽洜涓烘墍鏈夌殑綾?Set 鏂規硶錛堝寘鎷?Insert鏂規硶錛変笉浼氭敼鍙樺瓧絎︿覆鐨勫唴瀹廣備絾鏄綋浣犻渶瑕佸啓 CString 瀵硅薄鏃訛紝蹇呴』淇濊瘉緙撳啿鏄彲鍐欑殑錛岃繖姝f槸 GetBuffer 鎵鍋氱殑浜嬫儏銆傚啀嬈″己璋冿細 涓鏃﹀仛浜嗕竴嬈?GetBuffer 璋冪敤錛岄偅涔堝湪璋冪敤 ReleaseBuffer 涔嬪墠涓嶈瀵硅繖涓?CString 瀵硅薄鍋氫換浣曟搷浣溿?br>
    5銆?strong> 6銆?strong>

    銆銆瀵逛簬鍗曚釜鐨?BSTR 涓叉潵璇達紝榪欑鐢ㄦ硶鍙互宸ヤ綔寰楀緢濂斤紝榪欐槸鍥犱負 CString 鏈変竴涓壒孌婄殑鏋勯犲嚱鏁頒互LPCWSTR錛圔STR姝f槸榪欑綾誨瀷錛?涓哄弬鏁幫紝騫跺皢瀹冭漿鍖栨垚 ANSI 綾誨瀷銆備笓闂ㄦ鏌ユ槸蹇呴』鐨勶紝鍥犱負 BSTR 鍙兘涓虹┖鍊鹼紝鑰?CString 鐨勬瀯閫犲嚱鏁板浜?NULL 鍊兼儏鍐佃冭檻鐨勪笉鏄緢鍛ㄥ埌錛岋紙鎰熻阿 Brian Ross 鎸囧嚭榪欎竴鐐?錛夈傝繖縐嶇敤娉曚篃鍙兘澶勭悊鍖呭惈 NUL 緇堢粨瀛楃鐨勫崟瀛楃涓詫紱濡傛灉瑕佽漿鍖栧惈鏈夊涓?NULL 瀛楃 涓詫紝浣犲緱棰濆鍋氫竴浜涘伐浣滄墠琛屻傚湪 CString 涓唴宓岀殑 NULL 瀛楃閫氬父琛ㄧ幇涓嶅敖濡備漢鎰忥紝搴旇灝介噺閬垮厤銆?br>銆銆鏍規嵁 C/C++ 瑙勫垯錛屽鏋滀綘鏈変竴涓?LPWSTR錛岄偅涔堝畠鍒棤閫夋嫨錛屽彧鑳藉拰 LPCWSTR 鍙傛暟鍖歸厤銆?br>
    鍦?Unicode 妯″紡涓嬶紝瀹冪殑鏋勯犲嚱鏁版槸錛?/p>

    CString::CString(LPCTSTR);

    姝e涓婇潰鎵琛ㄧず鐨勶紝鍦?ANSI 妯″紡涓嬶紝瀹冩湁涓涓壒孌婄殑鏋勯犲嚱鏁幫細

    CString::CString(LPCWSTR); 

    銆銆瀹冧細璋冪敤涓涓唴閮ㄧ殑鍑芥暟灝?Unicode 瀛楃涓茶漿鎹㈡垚 ANSI 瀛楃涓層傦紙鍦║nicode妯″紡涓嬶紝鏈変竴涓笓闂ㄧ殑鏋勯犲嚱鏁幫紝璇ュ嚱鏁版湁涓涓弬鏁版槸LPCSTR綾誨瀷鈥斺斾竴涓?浣?ANSI 瀛楃涓?鎸囬拡錛岃鍑芥暟灝嗗畠鍔犲涓?Unicode 鐨勫瓧絎︿覆錛侊級鍐嶆寮鴻皟錛氫竴瀹氳媯鏌?BSTR 鐨勫兼槸鍚︿負 NULL銆?br>銆銆鍙﹀榪樻湁涓涓棶棰橈紝姝e涓婃枃鎻愬埌鐨勶細BSTRs鍙互鍚湁澶氫釜鍐呭祵鐨凬ULL瀛楃錛屼絾鏄?CString 鐨勬瀯閫犲嚱鏁板彧鑳藉鐞嗘煇涓覆涓崟涓?NULL 瀛楃銆?涔熷氨鏄錛屽鏋滀覆涓惈鏈夊祵鍏ョ殑 NUL瀛楄妭錛孋String 灝嗕細璁$畻鍑洪敊璇殑涓查暱搴︺備綘蹇呴』鑷繁澶勭悊瀹冦傚鏋滀綘鐪嬬湅 strcore.cpp 涓殑鏋勯犲嚱鏁幫紝浣犱細鍙戠幇 瀹冧滑閮借皟鐢ㄤ簡lstrlen錛屼篃灝辨槸璁$畻瀛楃涓茬殑闀垮害銆?br>銆銆娉ㄦ剰浠?Unicode 鍒?ANSI 鐨勮漿鎹嬌鐢ㄥ甫涓撻棬鍙傛暟鐨?::WideCharToMultiByte錛屽鏋滀綘涓嶆兂浣跨敤榪欑榛樿鐨勮漿鎹㈡柟寮忥紝鍒欏繀欏葷紪鍐欒嚜宸辯殑杞寲浠g爜銆?br>銆銆濡傛灉浣犲湪 UNICODE 妯″紡涓嬬紪璇戜唬鐮侊紝浣犲彲浠ョ畝鍗曞湴鍐欐垚錛?br>

    CString convert(BSTR b){    if(b == NULL)        return CString(_T(""));    CString s(b); // in UNICODE mode    return s;}
    銆銆濡傛灉鏄?ANSI 妯″紡錛屽垯闇瑕佹洿澶嶆潅鐨勮繃紼嬫潵杞崲銆傛敞鎰忚繖涓唬鐮佷嬌鐢ㄤ笌 ::WideCharToMultiByte 鐩稿悓鐨勫弬鏁板箋傛墍浠ヤ綘 鍙兘鍦ㄦ兂瑕佹敼鍙樿繖浜涘弬鏁拌繘琛岃漿鎹㈡椂浣跨敤璇ユ妧鏈備緥濡傦紝鎸囧畾涓嶅悓鐨勯粯璁ゅ瓧絎︼紝涓嶅悓鐨勬爣蹇楅泦絳夈?
    CString convert(BSTR b){    CString s;    if(b == NULL)       return s; // empty for NULL BSTR#ifdef UNICODE    s = b;#else    LPSTR p = s.GetBuffer(SysStringLen(b) + 1);     ::WideCharToMultiByte(CP_ACP,            // ANSI Code Page                          0,                 // no flags                          b,                 // source widechar string                          -1,                // assume NUL-terminated                          p,                 // target buffer                          SysStringLen(b)+1, // target buffer length                          NULL,              // use system default char                          NULL);             // don''t care if default used    s.ReleaseBuffer();#endif    return s;}
    銆銆鎴戝茍涓嶆媴蹇冨鏋?BSTR 鍖呭惈娌℃湁鏄犲皠鍒?8 浣嶅瓧絎﹂泦鐨?Unicode 瀛楃鏃朵細鍙戠敓浠涔堬紝鍥犱負鎴戞寚瀹氫簡::WideCharToMultiByte 鐨勬渶鍚庝袱涓弬鏁頒負 NULL銆傝繖灝辨槸浣犲彲鑳介渶瑕佹敼鍙樼殑鍦版柟銆?

    7銆?strong>
    8銆?strong>杞藉叆瀛楃涓茶〃璧勬簮


    銆銆濡傛灉浣犳兂鍒涘緩涓涓鏄撹繘琛岃璦鐗堟湰縐繪鐨勫簲鐢ㄧ▼搴忥紝浣犲氨涓嶈兘鍦ㄤ綘鐨勬簮浠g爜涓洿鎺ュ寘鍚湰鍦熻璦瀛楃涓?錛堜笅闈㈣繖浜涗緥瀛愭垜鐢ㄧ殑璇█閮芥槸鑻辮錛屽洜涓烘垜鐨勬湰鍦熻鏄嫳璇級錛屾瘮濡備笅闈㈣繖縐嶅啓娉曞氨寰堢碂錛?
    CString s = "There is an error";

    銆銆浣犲簲璇ユ妸浣犳墍鏈夌壒瀹氳璦鐨勫瓧絎︿覆鍗曠嫭鎽嗘斁錛堣皟璇曚俊鎭佸湪鍙戝竷鐗堟湰涓笉鍑虹幇鐨勪俊鎭櫎澶栵級銆傝繖鎰忓懗鐫鍚戜笅闈㈣繖鏍峰啓姣旇緝濂斤細

    s.Format(_T("%d - %s"), code, text);

    銆銆鍦ㄤ綘鐨勭▼搴忎腑錛屾枃瀛楀瓧絎︿覆涓嶆槸璇█鏁忔劅鐨勩備笉綆℃庢牱錛屼綘蹇呴』寰堝皬蹇冿紝涓嶈浣跨敤涓嬮潰榪欐牱鐨勪覆錛?/p>

    // fmt is "Error in %s file %s"http:// readorwrite is "reading" or "writing"s.Format(fmt, readorwrite, filename); 

    銆銆榪欐槸鎴戠殑鍒囪韓浣撲細銆傚湪鎴戠殑絎竴涓浗闄呭寲鐨勫簲鐢ㄧ▼搴忎腑鎴戠姱浜嗚繖涓敊璇紝灝界鎴戞噦寰瘋錛岀煡閬撳湪寰瘋鐨勮娉曚腑鍔ㄨ瘝鏀懼湪鍙ュ瓙鐨勬渶鍚庨潰錛屾垜浠殑寰峰浗鏂歸潰鐨勫彂琛屼漢榪樻槸鑻﹁嫤鐨勬姳鎬ㄤ粬浠笉寰椾笉鎻愬彇閭d簺涓嶅彲鎬濊鐨勫痙璇敊璇彁紺轟俊鎭劧鍚庨噸鏂版牸寮忓寲浠ヨ瀹冧滑鑳芥甯稿伐浣溿傛瘮杈冨ソ鐨勫姙娉曪紙涔熸槸鎴戠幇鍦ㄤ嬌鐢ㄧ殑鍔炴硶錛夋槸浣跨敤涓や釜瀛楃涓詫紝涓涓敤 浜庤錛屼竴涓敤浜庡啓錛屽湪浣跨敤鏃跺姞杞藉悎閫傜殑鐗堟湰錛屼嬌寰楀畠浠瀛楃涓插弬鏁版槸闈炴晱鎰熺殑銆備篃灝辨槸璇村姞杞芥暣涓牸寮忥紝鑰屼笉鏄姞杞戒覆“reading”錛?#8220;writing”錛?/p>

    // fmt is "Error in reading file %s"http:// "Error in writing file %s"s.Format(fmt, filename);

    銆銆涓瀹氳娉ㄦ剰錛屽鏋滀綘鏈夊ソ鍑犱釜鍦版柟闇瑕佹浛鎹紝浣犱竴瀹氳淇濊瘉鏇挎崲鍚庡彞瀛愮殑緇撴瀯涓嶄細鍑虹幇闂錛屾瘮濡傚湪鑻辮涓紝鍙互鏄富璇?瀹捐錛屼富璇?璋撹錛屽姩璇?瀹捐鐨勭粨鏋勭瓑絳夈?br>銆銆鍦ㄨ繖閲岋紝鎴戜滑騫朵笉璁ㄨ FormatMessage錛屽叾瀹炲畠姣?sprintf/Format 榪樿鏈変紭鍔匡紝浣嗘槸涓嶅お瀹規槗鍜孋String 緇撳悎浣跨敤銆傝В鍐寵繖縐嶉棶棰樼殑鍔炴硶灝辨槸鎴戜滑鎸夌収鍙傛暟鍑虹幇鍦ㄥ弬鏁拌〃涓殑浣嶇疆緇欏弬鏁板彇鍚嶅瓧錛岃繖鏍峰湪浣犺緭鍑虹殑鏃跺欏氨涓嶄細鎶婁粬浠殑浣嶇疆鎺掗敊浜嗐?br>銆銆鎺ヤ笅鏉ユ垜浠璁烘垜浠繖浜涚嫭绔嬬殑瀛楃涓叉斁鍦ㄤ粈涔堝湴鏂廣傛垜浠彲浠ユ妸瀛楃涓茬殑鍊兼斁鍏ヨ祫婧愭枃浠朵腑鐨勪竴涓О涓?STRINGTABLE 鐨勬涓傝繃紼嬪涓嬶細棣栧厛浣跨敤 Visual Studio 鐨勮祫婧愮紪杈戝櫒鍒涘緩涓涓瓧絎︿覆錛岀劧鍚庣粰姣忎竴涓瓧絎︿覆鍙栦竴涓狪D錛屼竴鑸垜浠粰瀹冨彇鍚嶅瓧閮戒互 IDS_寮澶淬傛墍浠ュ鏋滀綘鏈変竴涓俊鎭紝浣犲彲浠ュ垱寤轟竴涓瓧絎︿覆璧勬簮鐒跺悗鍙栧悕涓?IDS_READING_FILE錛屽彟澶栦竴涓氨鍙栧悕涓?IDS_WRITING_FILE銆傚畠浠互涓嬮潰鐨勫艦寮忓嚭鐜板湪浣犵殑 .rc 鏂囦歡涓細

    STRINGTABLEIDS_READING_FILE "Reading file %s"IDS_WRITING_FILE "Writing file %s"END

    娉ㄦ剰錛?/strong>榪欎簺璧勬簮閮戒互 Unicode 鐨勬牸寮忎繚瀛橈紝涓嶇浣犳槸鍦ㄤ粈涔堢幆澧冧笅緙栬瘧銆備粬浠湪Win9x緋葷粺涓婁篃鏄互Unicode 鐨勫艦寮忓瓨鍦紝铏界劧 Win9x 涓嶈兘鐪熸澶勭悊 Unicode銆?br>鐒跺悗浣犲彲浠ヨ繖鏍蜂嬌鐢ㄨ繖浜涜祫婧愶細
    // 鍦ㄤ嬌鐢ㄨ祫婧愪覆琛ㄤ箣鍓嶏紝紼嬪簭鏄繖鏍峰啓鐨勶細

       CString fmt;      if(...)        fmt = "Reading file %s";     else       fmt = "Writing file %s";  ...    // much later  CString s;  s.Format(fmt, filename); 
    // 浣跨敤璧勬簮涓茶〃涔嬪悗錛岀▼搴忚繖鏍峰啓錛?
        CString fmt;        if(...)           fmt.LoadString(IDS_READING_FILE);        else           fmt.LoadString(DS_WRITING_FILE);    ...      // much later    CString s;    s.Format(fmt, filename);
    銆銆鐜板湪錛屼綘鐨勪唬鐮佸彲浠ョЩ妞嶅埌浠諱綍璇█涓幓銆侺oadString 鏂規硶闇瑕佷竴涓瓧絎︿覆璧勬簮鐨?ID 浣滀負鍙傛暟錛岀劧鍚庡畠浠?STRINGTABLE 涓彇鍑哄畠瀵瑰簲鐨勫瓧絎︿覆錛岃祴鍊肩粰 CString 瀵硅薄銆?CString 瀵硅薄鐨勬瀯閫犲嚱鏁拌繕鏈変竴涓洿鍔犺仾鏄庣殑鐗瑰緛鍙互綆鍖?STRINGTABLE 鐨勪嬌鐢ㄣ傝繖涓敤娉曞湪 CString::CString 鐨勬枃妗d腑娌℃湁鎸囧嚭錛屼絾鏄湪 鏋勯犲嚱鏁扮殑紺轟緥紼嬪簭涓嬌鐢ㄤ簡銆傦紙涓轟粈涔堣繖涓壒鎬ф病鏈夋垚涓烘寮忔枃妗g殑涓閮ㄥ垎錛岃屾槸鏀懼湪浜嗕竴涓緥瀛愪腑錛屾垜璁頒笉寰椾簡錛侊級鈥斺斻?strong>璇戣呮敞
    錛氫粠榪欏彞璇濈湅錛屼綔鑰呭彲鑳芥槸CString鐨勮璁¤呫傚叾瀹炲墠闈㈣繕鏈変竴鍙ョ被浼肩殑璇濄傝浠栨病鏈夊浣跨敤GetBuffer(0)鑾峰緱鐨勬寚閽堟寚鍚戠殑鍦板潃鏄惁鍙鍋氭湁鏁堟ф鏌?銆戙傝繖涓壒寰佸氨鏄細濡傛灉浣犲皢涓涓瓧絎︿覆璧勬簮鐨処D寮哄埗綾誨瀷杞崲涓?LPCTSTR錛屽皢浼氶殣鍚皟鐢?LoadString銆傚洜姝わ紝涓嬮潰涓や釜鏋勯犲瓧絎︿覆鐨勪緥瀛愬叿鏈夌浉鍚岀殑鏁堟灉錛岃屼笖鍏?ASSERT 鍦╠ebug妯″紡涓嬩笉浼氳瑙﹀彂錛?
    CString s;s.LoadString(IDS_WHATEVER);CString t( (LPCTSTR)IDS_WHATEVER );ASSERT(s == t);//涓嶄細琚Е鍙戯紝璇存槑s鍜宼鏄浉鍚岀殑銆?/pre>
    

    銆銆鐜板湪錛屼綘鍙兘浼氭兂錛氳繖鎬庝箞鍙兘宸ヤ綔鍛紵鎴戜滑鎬庝箞鑳芥妸 STRINGTABLE ID 杞寲鎴愪竴涓寚閽堝憿錛熷緢綆鍗曪細鎵鏈夌殑瀛楃涓?ID 閮藉湪1~65535榪欎釜鑼冨洿鍐咃紝涔熷氨鏄錛屽畠鎵鏈夌殑楂樹綅閮芥槸0錛岃屾垜浠湪紼嬪簭涓墍浣跨敤鐨勬寚閽堟槸涓嶅彲鑳藉皬浜?5535鐨勶紝鍥犱負紼嬪簭鐨勪綆 64K 鍐呭瓨姘歌繙涔熶笉鍙兘瀛樺湪鐨勶紝濡傛灉浣犺瘯鍥捐闂?x00000000鍒?x0000FFFF涔嬮棿鐨勫唴瀛橈紝灝嗕細寮曞彂涓涓唴瀛樿秺鐣岄敊璇傛墍浠ヨ1~65535鐨勫間笉鍙兘鏄竴涓唴瀛樺湴鍧錛屾墍浠ユ垜浠彲浠ョ敤榪欎簺鍊兼潵浣滀負瀛楃涓茶祫婧愮殑ID銆?br>銆銆鎴戝懼悜浜庝嬌鐢?MAKEINTRESOURCE 瀹忔樉寮忓湴鍋氳繖縐嶈漿鎹€傛垜璁や負榪欐牱鍙互璁╀唬鐮佹洿鍔犳槗浜庨槄璇匯傝繖鏄釜鍙傚悎鍦?MFC 涓嬌鐢ㄧ殑鏍囧噯瀹忋備綘瑕佽浣忥紝澶у鏁扮殑鏂規硶鍗沖彲浠ユ帴鍙椾竴涓?UINT 鍨嬬殑鍙傛暟錛屼篃鍙互鎺ュ彈涓涓?LPCTSTR 鍨嬬殑鍙傛暟錛岃繖鏄緷璧?C++ 鐨勯噸杞藉姛鑳藉仛鍒扮殑銆侰++閲嶈澆鍑芥暟甯︽潵鐨?寮婄灝辨槸閫犳垚鎵鏈夌殑寮哄埗綾誨瀷杞寲閮介渶瑕佹樉紺哄0鏄庛傚悓鏍鳳紝浣犱篃鍙互緇欏緢澶氱緇撴瀯鍙紶閫掍竴涓祫婧愬悕銆?/p>

    CString s;s.LoadString(IDS_WHATEVER);CString t( MAKEINTRESOURCE(IDS_WHATEVER));ASSERT(s == t);

    銆銆鍛婅瘔浣犲惂錛氭垜涓嶄粎鍙槸鍦ㄨ繖閲岄紦鍚癸紝浜嬪疄涓婃垜涔熸槸榪欎箞鍋氱殑銆傚湪鎴戠殑浠g爜涓紝浣犲嚑涔庝笉鍙兘鎵懼埌涓涓瓧絎︿覆錛屽綋鐒訛紝閭d簺鍙槸鍋剁劧鍦ㄨ皟璇曚腑鍑虹幇鐨勬垨鑰呭拰璇█鏃犲叧鐨勫瓧絎︿覆闄ゅ銆?br>
    9銆?strong>

    char* szName = GetName().GetBuffer(20);RegSetValueEx(hKey, "Name", 0, REG_SZ,              (CONST BYTE *) szName,             strlen (szName + 1));

    榪欎釜 Name 瀛楃涓茬殑闀垮害灝忎簬 20錛屾墍浠ユ垜涓嶈涓烘槸 GetBuffer 鐨勫弬鏁扮殑闂銆?br>
    鐪熻浜哄洶鎯戯紝璇峰府甯垜銆?br>
    浜茬埍鐨?Frustrated錛?br>
    浣犵姱浜嗕竴涓浉褰撳井濡欑殑閿欒錛岃仾鏄庡弽琚仾鏄庤錛屾紜殑浠g爜搴旇璞′笅闈㈣繖鏍鳳細

    CString Name = GetName();RegSetValueEx(hKey, _T("Name"), 0, REG_SZ,                     (CONST BYTE *) (LPCTSTR)Name,                    (Name.GetLength() + 1) * sizeof(TCHAR));
    銆銆涓轟粈涔堟垜鍐欑殑浠g爜鑳借鑰屼綘鍐欑殑灝辨湁闂鍛紵涓昏鏄洜涓哄綋浣犺皟鐢?GetName 鏃惰繑鍥炵殑 CString 瀵硅薄鏄竴涓復鏃跺璞°傚弬瑙侊細銆奀++ Reference manual銆?#167;12.2
    銆銆鍦ㄤ竴浜涚幆澧冧腑錛岀紪璇戝櫒鏈夊繀瑕佸垱寤轟竴涓復鏃跺璞★紝榪欐牱寮曞叆涓存椂瀵硅薄鏄緷璧栦簬瀹炵幇鐨勩傚鏋滅紪璇戝櫒寮曞叆鐨勮繖涓復鏃跺璞℃墍灞炵殑綾繪湁鏋勯犲嚱鏁扮殑璇濓紝緙栬瘧鍣ㄨ紜繚榪欎釜綾葷殑鏋勯犲嚱鏁拌璋冪敤銆傚悓鏍風殑錛屽鏋滆繖涓被澹版槑鏈夋瀽鏋勫嚱鏁扮殑璇濓紝涔熻淇濊瘉榪欎釜涓存椂瀵硅薄鐨勬瀽鏋勫嚱鏁拌璋冪敤銆?br>銆銆緙栬瘧鍣ㄥ繀欏諱繚璇佽繖涓復鏃跺璞¤閿姣佷簡銆傝閿姣佺殑紜垏鍦扮偣渚濊禆浜庡疄鐜?....榪欎釜鏋愭瀯鍑芥暟蹇呴』鍦ㄩ鍑哄垱寤鴻涓存椂瀵硅薄鐨勮寖鍥翠箣鍓嶈璋冪敤銆?br>銆銆澶ч儴鍒嗙殑緙栬瘧鍣ㄦ槸榪欐牱璁捐鐨勶細鍦ㄤ復鏃跺璞¤鍒涘緩鐨勪唬鐮佺殑涓嬩竴涓墽琛屾楠ゅ闅愬惈璋冪敤榪欎釜涓存椂瀵硅薄鐨勬瀽鏋勫嚱鏁幫紝瀹炵幇璧鋒潵錛屼竴鑸兘鏄湪涓嬩竴涓垎鍙峰銆傚洜姝わ紝榪欎釜 CString 瀵硅薄鍦?GetBuffer 璋冪敤涔嬪悗灝辮鏋愭瀯浜嗭紙欏轟究鎻愪竴鍙ワ紝浣犳病鏈夌悊鐢辯粰 GetBuffer 鍑芥暟浼犻掍竴涓弬鏁幫紝鑰屼笖娌℃湁浣跨敤ReleaseBuffer 涔熸槸涓嶅鐨勶級銆傛墍浠?GetBuffer 鏈潵榪斿洖鐨勬槸鎸囧悜榪欎釜涓存椂瀵硅薄涓瓧絎︿覆鐨勫湴鍧鐨勬寚閽堬紝浣嗘槸褰撹繖涓復鏃跺璞¤鏋愭瀯鍚庯紝榪欏潡鍐呭瓨灝辮閲婃斁浜嗐傜劧鍚?MFC 鐨勮皟璇曞唴瀛樺垎閰嶅櫒浼氶噸鏂頒負榪欏潡鍐呭瓨鍏ㄩ儴濉笂 0xDD錛屾樉紺哄嚭鏉ュ垰濂藉氨鏄?#8220;&Yacute;”絎﹀彿銆傚湪榪欎釜鏃跺欎綘鍚戞敞鍐岃〃涓啓鏁版嵁錛屽瓧絎︿覆鐨勫唴瀹瑰綋鐒跺叏琚牬鍧忎簡銆?br>銆銆鎴戜滑涓嶅簲璇ョ珛鍗蟲妸榪欎釜涓存椂瀵硅薄杞寲鎴?char* 綾誨瀷錛屽簲璇ュ厛鎶婂畠淇濆瓨鍒頒竴涓?CString 瀵硅薄涓紝榪欐剰鍛崇潃鎶婁復鏃跺璞″鍒朵簡涓浠斤紝鎵浠ュ綋涓存椂鐨?CString 瀵硅薄琚瀽鏋勪簡涔嬪悗錛岃繖涓?CString 瀵硅薄涓殑鍊間緷鐒朵繚瀛樼潃銆傝繖涓椂鍊欏啀鍚戞敞鍐岃〃涓啓鏁版嵁灝辨病鏈夐棶棰樹簡銆?br>銆銆姝ゅ錛屾垜鐨勪唬鐮佹槸鍏鋒湁 Unicode 鎰忚瘑鐨勩傞偅涓搷浣滄敞鍐岃〃鐨勫嚱鏁伴渶瑕佷竴涓瓧鑺傚ぇ灝忥紝浣跨敤lstrlen(Name+1) 寰楀埌鐨勫疄闄呯粨鏋滃浜?Unicode 瀛楃鏉ヨ姣?ANSI 瀛楃瑕佸皬涓鍗婏紝鑰屼笖瀹冧篃涓嶈兘浠庤繖涓瓧絎︿覆鐨勭浜屼釜瀛楃璧峰紑濮嬭綆楋紝涔熻浣犵殑鏈剰鏄?lstrlen(Name) + 1錛圤K錛屾垜鎵胯錛屾垜涔熺姱浜嗗悓鏍風殑閿欒錛侊級銆備笉璁哄浣曪紝鍦?Unicode 妯″紡涓嬶紝鎵鏈夌殑瀛楃閮芥槸2涓瓧鑺傚ぇ灝忥紝鎴戜滑闇瑕佸鐞嗚繖涓棶棰樸傚井杞殑鏂囨。浠や漢鎯婅鍦板姝や繚鎸佺紕榛橈細REG_SZ 鐨勫肩┒绔熸槸浠ュ瓧鑺傝綆楄繕鏄互瀛楃璁$畻鍛紵鎴戜滑鍋囪瀹冩寚鐨勬槸浠ュ瓧鑺備負鍗曚綅璁$畻錛屼綘闇瑕佸浣犵殑浠g爜鍋氫竴浜涗慨鏀規潵璁$畻榪欎釜瀛楃涓叉墍鍚湁鐨勫瓧鑺傚ぇ灝忋?br>
    10銆?strong>


    銆銆CString 鐨勪竴涓棶棰樻槸瀹冪‘瀹炴帺钘忎簡涓浜涗綆鏁堢巼鐨勪笢瑗褲備粠鍙﹀涓涓柟闈㈣錛屽畠涔熺‘瀹炲彲浠ヨ瀹炵幇寰楁洿鍔犻珮鏁堬紝浣犲彲鑳戒細璇翠笅闈㈢殑浠g爜錛?
    CString s = SomeCString1;s += SomeCString2;s += SomeCString3;s += ",";s += SomeCString4;

    姣旇搗涓嬮潰鐨勪唬鐮佹潵錛屾晥鐜囪浣庡浜嗭細

    char s[1024];lstrcpy(s, SomeString1);lstrcat(s, SomeString2);lstrcat(s, SomeString 3);lstrcat(s, ",");lstrcat(s, SomeString4);

    銆銆鎬諱箣錛屼綘鍙兘浼氭兂錛岄鍏堬紝瀹冧負 SomeCString1 鍒嗛厤涓鍧楀唴瀛橈紝鐒跺悗鎶?SomeCString1 澶嶅埗鍒伴噷闈紝鐒跺悗鍙戠幇瀹冭鍋氫竴涓繛鎺ワ紝鍒欓噸鏂板垎閰嶄竴鍧楁柊鐨勮凍澶熷ぇ鐨勫唴瀛橈紝澶у埌鑳藉鏀句笅褰撳墠鐨勫瓧絎︿覆鍔犱笂SomeCString2錛屾妸鍐呭澶嶅埗鍒拌繖鍧楀唴瀛?錛岀劧鍚庢妸 SomeCString2 榪炴帴鍒板悗闈紝鐒跺悗閲婃斁絎竴鍧楀唴瀛橈紝騫舵妸鎸囬拡閲嶆柊鎸囧悜鏂板唴瀛樸傜劧鍚庝負姣忎釜瀛楃涓查噸澶嶈繖涓繃紼嬨傛妸榪?4 涓瓧絎︿覆榪炴帴璧鋒潵鏁堢巼澶氫綆鍟娿備簨瀹炰笂錛屽湪寰堝鎯呭喌涓嬫牴鏈氨涓嶉渶瑕佸鍒舵簮瀛楃涓詫紙鍦?+= 鎿嶄綔絎﹀乏杈圭殑瀛楃涓詫級銆?br>銆銆鍦?VC++6.0 涓紝Release 妯″紡涓嬶紝鎵鏈夌殑 CString 涓殑緙撳瓨閮芥槸鎸夐瀹氫箟閲忓瓙鍒嗛厤鐨勩傛墍璋撻噺瀛愶紝鍗崇‘瀹氫負 64銆?28銆?56 鎴栬?512 瀛楄妭銆傝繖鎰忓懗鐫闄ら潪瀛楃涓查潪甯擱暱錛岃繛鎺ュ瓧絎︿覆鐨勬搷浣滃疄闄呬笂灝辨槸 strcat 緇忚繃浼樺寲鍚庣殑鐗堟湰錛堝洜涓哄畠鐭ラ亾鏈湴鐨勫瓧絎︿覆搴旇鍦ㄤ粈涔堝湴鏂圭粨鏉燂紝鎵浠ヤ笉闇瑕佸鎵懼瓧絎︿覆鐨勭粨灝撅紱鍙渶瑕佹妸鍐呭瓨涓殑鏁版嵁鎷瘋礉鍒版寚瀹氱殑鍦版柟鍗沖彲錛夊姞涓婇噸鏂拌綆楀瓧絎︿覆鐨勯暱搴︺傛墍浠ュ畠鐨勬墽琛屾晥鐜囧拰綰?C 鐨勪唬鐮佹槸涓鏍風殑錛屼絾鏄畠鏇村鏄撳啓銆佹洿瀹規槗緇存姢鍜屾洿瀹規槗鐞嗚В銆?br>銆銆濡傛灉浣犺繕鏄笉鑳界‘瀹氱┒绔熷彂鐢熶簡鎬庢牱鐨勮繃紼嬶紝璇風湅鐪?CString 鐨勬簮浠g爜錛宻trcore.cpp錛屽湪浣?vc98鐨勫畨瑁呯洰褰曠殑 mfc\src 瀛愮洰褰曚腑銆傜湅鐪?ConcatInPlace 鏂規硶錛屽畠琚湪鎵鏈夌殑 += 鎿嶄綔絎︿腑璋冪敤銆?br>
    鍟婂搱錛侀毦閬?CString 鐪熺殑榪欎箞"楂樻晥"鍚楋紵姣斿錛屽鏋滄垜鍒涘緩

    CString cat("Mew!");

    銆銆鐒跺悗鎴戝茍涓嶆槸寰楀埌浜嗕竴涓珮鏁堢殑銆佺簿綆鐨?涓瓧鑺傚ぇ灝忕殑緙撳啿鍖猴紙4涓瓧絎﹀姞涓涓粨鏉熷瓧絎︼級錛岀郴緇熷皢緇欐垜鍒嗛厤64涓瓧鑺傦紝鑰屽叾涓?9涓瓧鑺傞兘琚氮璐逛簡銆?br>銆銆濡傛灉浣犱篃鏄繖涔堟兂鐨勮瘽錛岄偅涔堝氨璇峰噯澶囧ソ鎺ュ彈鍐嶆暀鑲插惂銆傚彲鑳藉湪鏌愪釜鍦版柟鏌愪釜浜虹粰浣犺榪囧敖閲忎嬌鐢ㄥ皯鐨勭┖闂存槸浠跺ソ浜嬫儏銆備笉閿欙紝榪欑璇存硶鐨勭‘姝g‘錛屼絾鏄粬蹇界暐浜嗕簨瀹炰腑涓涓緢閲嶈鐨勬柟闈€?br>銆銆濡傛灉浣犵紪鍐欑殑鏄繍琛屽湪16K EPROMs涓嬬殑宓屽叆寮忕▼搴忕殑璇濓紝浣犳湁鐞嗙敱灝介噺灝戜嬌鐢ㄧ┖闂達紝鍦ㄨ繖縐嶇幆澧冧笅錛屽畠鑳戒嬌浣犵殑紼嬪簭鏇村仴澹備絾鏄湪 500MHz, 256MB鐨勬満鍣ㄤ笂鍐?Windows 紼嬪簭錛屽鏋滀綘榪樻槸榪欎箞鍋氾紝瀹冨彧浼氭瘮浣犺涓虹殑“浣庢晥”鐨勪唬鐮佽繍琛屽緱鏇寸碂銆?br>銆銆涓句緥鏉ヨ銆傚瓧絎︿覆鐨勫ぇ灝忚璁や負鏄獎鍝嶆晥鐜囩殑棣栬鍥犵礌錛屼嬌瀛楃涓插敖鍙兘灝忓彲浠ユ彁楂樻晥鐜囷紝鍙嶄箣鍒欓檷浣庢晥鐜囷紝榪欐槸澶у涓璐殑鎯蟲硶銆備絾鏄繖縐嶆兂娉曟槸涓嶅鐨勶紝綺劇‘鐨勫唴瀛樺垎閰嶇殑鍚庢灉瑕佸湪紼嬪簭榪愯浜嗗ソ鍑犱釜灝忔椂鍚庢墠鑳戒綋鐜板緱鍑烘潵錛岄偅鏃訛紝紼嬪簭鐨勫爢涓皢鍏呮弧灝忕墖鐨勫唴瀛橈紝瀹冧滑澶皬浠ヨ嚦浜庝笉鑳界敤鏉ュ仛浠諱綍浜嬶紝浣嗘槸浠栦滑澧炲姞浜嗕綘紼嬪簭鐨勫唴瀛樼敤閲忥紝澧炲姞浜嗗唴瀛橀〉闈氦鎹㈢殑嬈℃暟錛屽綋欏甸潰浜ゆ崲鐨勬鏁板鍔犲埌緋葷粺鑳藉蹇嶅彈鐨勪笂闄愶紝緋葷粺鍒欎細涓轟綘鐨勭▼搴忓垎閰嶆洿澶氱殑欏甸潰錛岀洿鍒頒綘鐨勭▼搴忓崰鐢ㄤ簡鎵鏈夌殑鍙敤鍐呭瓨銆傜敱姝ゅ彲瑙侊紝铏界劧鍐呭瓨紕庣墖鏄喅瀹氭晥鐜囩殑嬈¤鍥犵礌錛屼絾姝f槸榪欎簺鍥犵礌瀹為檯鎺у埗浜嗙郴緇熺殑琛屼負錛屾渶緇堬紝瀹冩崯瀹充簡緋葷粺鐨勫彲闈犳э紝榪欐槸浠や漢鏃犳硶鎺ュ彈鐨勩?br>銆銆璁頒綇錛屽湪 debug 妯″紡涓嬶紝鍐呭瓨寰寰鏄簿紜垎閰嶇殑錛岃繖鏄負浜嗘洿濂界殑鎺掗敊銆?br>銆銆鍋囪浣犵殑搴旂敤紼嬪簭閫氬父闇瑕佽繛緇伐浣滃ソ鍑犱釜鏈堛傛瘮濡傦紝鎴戝父鎵撳紑 VC++錛學ord錛孭owerPoint錛孎rontpage錛孫utlook Express錛孎orté Agent錛孖nternet Explorer鍜屽叾瀹冪殑涓浜涚▼搴忥紝鑰屼笖閫氬父涓嶅叧闂畠浠傛垜鏇劇粡澶滀互緇ф棩鍦拌繛緇敤 PowerPoint 宸ヤ綔浜嗗ソ鍑犲ぉ錛堝弽涔嬶紝濡傛灉浣犱笉騫鎬笉寰椾笉浣跨敤鍍?Adobe FrameMaker 榪欐牱鐨勭▼搴忕殑璇濓紝浣犲皢浼氫綋浼氬埌鍙潬鎬х殑閲嶈錛涜繖涓▼搴忔満浼氭瘡澶╅兘瑕佸穿婧?~6嬈★紝姣忔閮芥槸鍥犱負鐢ㄥ畬浜嗘墍鏈夌殑絀洪棿騫跺~婊℃垜鎵鏈夌殑浜ゆ崲欏甸潰錛夈傛墍浠ョ簿紜唴瀛樺垎閰嶆槸涓嶅彲鍙栫殑錛屽畠浼氬嵄鍙婂埌緋葷粺鐨勫彲闈犳э紝騫跺紩璧峰簲鐢ㄧ▼搴忓穿婧冦?br>銆銆鎸夐噺瀛愮殑鍊嶆暟涓哄瓧絎︿覆鍒嗛厤鍐呭瓨錛屽唴瀛樺垎閰嶅櫒灝卞彲浠ュ洖鏀剁敤榪囩殑鍐呭瓨鍧楋紝閫氬父榪欎簺鍥炴敹鐨勫唴瀛樺潡椹笂灝卞彲浠ヨ鍏跺畠鐨?CString 瀵硅薄閲嶆柊鐢ㄥ埌錛岃繖鏍峰氨鍙互淇濊瘉紕庣墖鏈灝戙傚垎閰嶅櫒鐨勫姛鑳藉姞寮轟簡錛屽簲鐢ㄧ▼搴忕敤鍒扮殑鍐呭瓨灝辮兘灝藉彲鑳戒繚鎸佹渶灝忥紝榪欐牱鐨勭▼搴忓氨鍙互榪愯鍑犱釜鏄熸湡鎴栧嚑涓湀鑰屼笉鍑虹幇闂銆?br>銆銆棰樺璇濓細寰堝騫翠互鍓嶏紝鎴戜滑鍦?CMU 鍐欎竴涓氦浜掑紡緋葷粺鐨勬椂鍊欙紝涓浜涘鍐呭瓨鍒嗛厤鍣ㄧ殑鐮旂┒鏄劇ず鍑哄畠寰寰浜х敓寰堝鍐呭瓨紕庣墖銆侸im Mitchell錛岀幇鍦ㄤ粬鍦?Sun Microsystems 宸ヤ綔錛岄偅鏃朵警浠栧垱閫犱簡涓縐嶅唴瀛樺垎閰嶅櫒錛屽畠淇濈暀浜嗕竴涓唴瀛樺垎閰嶇姸鍐電殑榪愯鏃剁粺璁¤〃錛岃繖縐嶆妧鏈拰褰撴椂鐨勪富嫻佸垎閰嶅櫒鎵鐢ㄧ殑鎶鏈兘涓嶅悓錛屼笖杈冧負棰嗗厛銆傚綋涓涓唴瀛樺潡闇瑕佽鍒嗗壊寰楁瘮鏌愪竴涓煎皬鐨勮瘽錛屼粬騫朵笉鍒嗗壊瀹冿紝鍥犳鍙互閬垮厤浜х敓澶灝忓埌浠涔堜簨閮藉共涓嶄簡鐨勫唴瀛樼鐗囥備簨瀹炰笂浠栧湪鍐呭瓨鍒嗛厤鍣ㄤ腑浣跨敤浜嗕竴涓誕鍔ㄦ寚閽堬紝浠栬涓猴細涓庡叾璁╂寚浠ゅ仛闀挎椂闂寸殑瀛樺彇鍐呭瓨鎿嶄綔錛岃繕涓嶅綆鍗曠殑蹇界暐閭d簺澶皬鐨勫唴瀛樺潡鑰屽彧鍋氫竴浜涙誕鍔ㄦ寚閽堢殑鎿嶄綔銆傦紙His observation was that the long-term saving in instructions by not having to ignore unusable small storage chunks far and away exceeded the additional cost of doing a few floating point operations on an allocation operation.錛変粬鏄鐨勩?br>銆銆姘歌繙涓嶈璁や負鎵璋撶殑“鏈浼樺寲”鏄緩绔嬪湪姣忎竴琛屼唬鐮侀兘楂橀熶笖鑺傜渷鍐呭瓨鐨勫熀紜涓婄殑錛屼簨瀹炰笂錛岄珮閫熶笖鑺傜渷鍐呭瓨搴旇鏄湪涓涓簲鐢ㄧ▼搴忕殑鏁翠綋姘村鉤涓婅冭檻鐨勩傚湪杞歡鐨勬暣浣撴按騫充笂錛屽彧浣跨敤鏈灝忓唴瀛樼殑瀛楃涓插垎閰嶇瓥鐣ュ彲鑳芥槸鏈緋熺硶鐨勪竴縐嶆柟娉曘?br>銆銆濡傛灉浣犺涓轟紭鍖栨槸浣犲湪姣忎竴琛屼唬鐮佷笂鍋氱殑閭d簺鍔姏鐨勮瘽錛屼綘搴旇鎯充竴鎯籌細鍦ㄦ瘡涓琛屼唬鐮佷腑鍋氱殑浼樺寲寰堝皯鑳界湡姝h搗浣滅敤銆備綘鍙互鐪嬫垜鐨勫彟涓綃囧叧浜庝紭鍖栭棶棰樼殑鏂囩珷銆奩our Worst Enemy for some thought-provoking ideas銆嬨?br>銆銆璁頒綇錛?= 榪愮畻絎﹀彧鏄竴縐嶇壒渚嬶紝濡傛灉浣犲啓鎴愪笅闈㈣繖鏍鳳細

    CString s = SomeCString1 + SomeCString2 + SomeCString3 + "," + SomeCString4;

    鍒欐瘡涓涓?+ 鐨勫簲鐢ㄤ細閫犳垚涓涓柊鐨勫瓧絎︿覆琚垱寤哄拰涓嬈″鍒舵搷浣溿?br>
    鎬葷粨

    銆銆浠ヤ笂鏄嬌鐢?CString 鐨勪竴浜涙妧宸с傛垜姣忓ぉ鍐欑▼搴忕殑鏃跺欓兘浼氱敤鍒拌繖浜涖侰String 騫朵笉鏄竴縐嶅緢闅句嬌鐢ㄧ殑綾伙紝浣嗘槸 MFC 娌℃湁寰堟槑鏄劇殑鎸囧嚭榪欎簺鐗瑰緛錛岄渶瑕佷綘鑷繁鍘繪帰绱€佸幓鍙戠幇銆?br>



    ]]>闊抽緙栬В鐮佹爣鍑?/title><link>http://m.shnenglu.com/gtwdaizi/articles/41884.html</link><dc:creator>閮ぉ鏂?/dc:creator><author>閮ぉ鏂?/author><pubDate>Fri, 25 Jan 2008 05:29:00 GMT</pubDate><guid>http://m.shnenglu.com/gtwdaizi/articles/41884.html</guid><wfw:comment>http://m.shnenglu.com/gtwdaizi/comments/41884.html</wfw:comment><comments>http://m.shnenglu.com/gtwdaizi/articles/41884.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.shnenglu.com/gtwdaizi/comments/commentRss/41884.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/gtwdaizi/services/trackbacks/41884.html</trackback:ping><description><![CDATA[<dd> <div><br><span style="COLOR: red">PCMU(G.711U)<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?4Kbps(90.4)<br>鐗規э細PCMU鍜孭CMA閮借兘鎻愪緵杈冨ソ鐨勮闊寵川閲忥紝浣嗘槸瀹冧滑鍗犵敤鐨勫甫瀹借緝楂橈紝闇瑕?4kbps銆?br>浼樼偣錛氳闊寵川閲忎紭<br>緙虹偣錛氬崰鐢ㄧ殑甯﹀杈冮珮<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛歅CMU and PCMA閮借兘澶熻揪鍒癈D闊寵川錛屼絾鏄畠浠秷鑰楃殑甯﹀涔熸渶澶?64kbps)銆傚鏋滅綉緇滃甫瀹芥瘮杈冧綆錛屽彲浠ラ夌敤浣庢瘮鐗歸熺巼鐨勭紪鐮佹柟娉曪紝濡侴.723鎴朑.729錛岃繖涓ょ緙栫爜鐨勬柟娉曚篃鑳借揪鍒頒紶緇熼暱閫旂數璇濈殑闊寵川錛屼絾鏄渶瑕佸緢灝戠殑甯﹀錛圙723闇瑕?.3/6.3kbps錛孏729闇瑕?kbps錛夈傚鏋滃甫瀹借凍澶熷茍涓旈渶瑕佹洿濂界殑璇煶璐ㄩ噺錛屽氨浣跨敤PCMU 鍜?PCMA錛岀敋鑷沖彲浠ヤ嬌鐢ㄥ甯︾殑緙栫爜鏂規硶G722(64kbps)錛岃繖鍙互鎻愪緵鏈夐珮淇濈湡搴︾殑闊寵川銆?br>                                                                                                             <br><br><span style="COLOR: red">PCMA(G.711A)<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?4Kbps(90.4)<br>鐗規э細PCMU鍜孭CMA閮借兘鎻愪緵杈冨ソ鐨勮闊寵川閲忥紝浣嗘槸瀹冧滑鍗犵敤鐨勫甫瀹借緝楂橈紝闇瑕?4kbps銆?br>浼樼偣錛氳闊寵川閲忎紭<br>緙虹偣錛氬崰鐢ㄧ殑甯﹀杈冮珮<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛歅CMU and PCMA閮借兘澶熻揪鍒癈D闊寵川錛屼絾鏄畠浠秷鑰楃殑甯﹀涔熸渶澶?64kbps)銆傚鏋滅綉緇滃甫瀹芥瘮杈冧綆錛屽彲浠ラ夌敤浣庢瘮鐗歸熺巼鐨勭紪鐮佹柟娉曪紝濡侴.723鎴朑.729錛岃繖涓ょ緙栫爜鐨勬柟娉曚篃鑳借揪鍒頒紶緇熼暱閫旂數璇濈殑闊寵川錛屼絾鏄渶瑕佸緢灝戠殑甯﹀錛圙723闇瑕?.3/6.3kbps錛孏729闇瑕?kbps錛夈傚鏋滃甫瀹借凍澶熷茍涓旈渶瑕佹洿濂界殑璇煶璐ㄩ噺錛屽氨浣跨敤PCMU 鍜?PCMA錛岀敋鑷沖彲浠ヤ嬌鐢ㄥ甯︾殑緙栫爜鏂規硶G722(64kbps)錛岃繖鍙互鎻愪緵鏈夐珮淇濈湡搴︾殑闊寵川銆?/div> <dt>  <dd> <div><br><span style="COLOR: red">ADPCM(鑷傚簲宸垎PCM)<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?2Kbps<br>鐗規э細ADPCM(adaptive difference pulse code modulation)緇煎悎浜咥PCM鐨勮嚜閫傚簲鐗規у拰DPCM緋葷粺鐨勫樊鍒嗙壒鎬э紝鏄竴縐嶆ц兘姣旇緝濂界殑娉㈠艦緙栫爜銆傚畠鐨勬牳蹇冩兂娉曟槸錛?br>       鈶犲埄鐢ㄨ嚜閫傚簲鐨勬濇兂鏀瑰彉閲忓寲闃剁殑澶у皬錛屽嵆浣跨敤灝忕殑閲忓寲闃?step-size)鍘葷紪鐮佸皬鐨勫樊鍊鹼紝浣跨敤澶х殑閲忓寲闃跺幓緙栫爜澶х殑宸鹼紱<br>       鈶′嬌鐢ㄨ繃鍘葷殑鏍鋒湰鍊間及綆椾笅涓涓緭鍏ユ牱鏈殑棰勬祴鍊鹼紝浣垮疄闄呮牱鏈煎拰棰勬祴鍊間箣闂寸殑宸兼繪槸鏈灝忋?br>浼樼偣錛氱畻娉曞鏉傚害浣庯紝鍘嬬緝姣斿皬錛圕D闊寵川>400kbps錛夛紝緙栬В鐮佸歡鏃舵渶鐭紙鐩稿鍏跺畠鎶鏈級<br>緙虹偣錛氬0闊寵川閲忎竴鑸?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛欰DPCM (ADPCM Adaptive Differential Pulse Code Modulation), 鏄竴縐嶉拡瀵?16bit (鎴栬呮洿楂?) 澹伴煶娉㈠艦鏁版嵁鐨勪竴縐嶆湁鎹熷帇緙╃畻娉? 瀹冨皢澹伴煶嫻佷腑姣忔閲囨牱鐨?16bit 鏁版嵁浠?4bit 瀛樺偍, 鎵浠ュ帇緙╂瘮 1:4. 鑰屽帇緙?瑙e帇緙╃畻娉曢潪甯哥殑綆鍗? 鎵浠ユ槸涓縐嶄綆絀洪棿娑堣?楂樿川閲忓0闊寵幏寰楃殑濂介斿緞銆?br>                                                                                                              <br><br><span style="COLOR: red">LPC(Linear Predictive Coding錛岀嚎鎬ч嫻嬬紪鐮?<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細 <br>鎵闇棰戝錛?Kbps-4.8Kbps<br>鐗規э細鍘嬬緝姣斿ぇ錛岃綆楅噺澶э紝闊寵川涓嶉珮錛屽粔浠?br>浼樼偣錛氬帇緙╂瘮澶?寤変環<br>緙虹偣錛氳綆楅噺澶э紝璇煶璐ㄩ噺涓嶆槸寰堝ソ錛岃嚜鐒跺害杈冧綆<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛氬弬鏁扮紪鐮佸張縐頒負澹版簮緙栫爜錛屾槸灝嗕俊婧愪俊鍙峰湪棰戠巼鍩熸垨鍏跺畠姝d氦鍙樻崲鍩熸彁鍙栫壒寰佸弬鏁幫紝騫跺皢鍏跺彉鎹㈡垚鏁板瓧浠g爜榪涜浼犺緭銆傝瘧鐮佷負鍏跺弽榪囩▼錛屽皢鏀跺埌鐨勬暟瀛楀簭鍒楃粡鍙樻崲鎭㈠鐗瑰緛鍙傞噺錛屽啀鏍規嵁鐗瑰緛鍙傞噺閲嶅緩璇煶淇″彿銆傚叿浣撹錛屽弬鏁扮紪鐮佹槸閫氳繃瀵硅闊充俊鍙風壒寰佸弬鏁扮殑鎻愬彇鍜岀紪鐮侊紝鍔涘浘浣塊噸寤鴻闊充俊鍙峰叿鏈夊敖鍙兘楂樼殑鍑嗙‘鎬э紝浣嗛噸寤轟俊鍙風殑娉㈠艦鍚屽師璇煶淇″彿鐨勬嘗褰㈠彲鑳戒細鏈夌浉褰撳ぇ鐨勫樊鍒傚錛氱嚎鎬ч嫻嬬紪鐮侊紙LPC錛夊強鍏跺畠鍚勭鏀硅繘鍨嬮兘灞炰簬鍙傛暟緙栫爜銆傝緙栫爜姣旂壒鐜囧彲鍘嬬緝鍒?Kbit/s-4.8Kbit/s錛岀敋鑷蟲洿浣庯紝浣嗚闊寵川閲忓彧鑳借揪鍒頒腑絳夛紝鐗瑰埆鏄嚜鐒跺害杈冧綆銆?/div> <dt>  <dd> <div><br><span style="COLOR: red">CELP(Code Excited Linear Prediction錛岀爜嬋鍔辯嚎鎬ч嫻嬬紪鐮?<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細嬈ф床閫氫俊鏍囧噯鍗忎細錛圗TSI錛?br>鎵闇棰戝錛?锝?6Kbps鐨勯熺巼<br>鐗規э細鏀瑰杽璇煶鐨勮川閲忥細<br>       鈶?瀵硅宸俊鍙瘋繘琛屾劅瑙夊姞鏉冿紝鍒╃敤浜虹被鍚鐨勬帺钄界壒鎬ф潵鎻愰珮璇煶鐨勪富瑙傝川閲忥紱<br>       鈶$敤鍒嗘暟寤惰繜鏀硅繘鍩洪煶棰勬祴錛屼嬌嫻婇煶鐨勮〃杈炬洿涓哄噯紜紝灝ゅ叾鏀瑰杽浜嗗コ鎬ц闊崇殑璐ㄩ噺錛?br>       鈶?浣跨敤淇鐨凪SPE鍑嗗垯鏉ュ鎵?“鏈浣?#8221;鐨勫歡榪燂紝浣垮緱鍩洪煶鍛ㄦ湡寤惰繜鐨勫褰㈡洿涓哄鉤婊戯紱<br>       鈶f牴鎹暱鏃墮嫻嬬殑鏁堢巼錛岃皟鏁撮殢鏈烘縺鍔辯煝閲忕殑澶у皬錛屾彁楂樿闊崇殑涓昏璐ㄩ噺錛?nbsp;      鈶?浣跨敤鍩轟簬淇¢亾閿欒鐜囦及璁$殑鑷傚簲騫蟲粦鍣紝鍦ㄤ俊閬撹鐮佺巼杈冮珮鐨勬儏鍐典笅涔熻兘鍚堟垚鑷劧搴﹁緝楂樼殑璇煶銆?br>       緇撹錛?br>       鈶?CELP綆楁硶鍦ㄤ綆閫熺巼緙栫爜鐜涓嬪彲浠ュ緱鍒頒護浜烘弧鎰忕殑鍘嬬緝鏁堟灉錛?br>       鈶′嬌鐢ㄥ揩閫熺畻娉曪紝鍙互鏈夋晥鍦伴檷浣嶤ELP綆楁硶鐨勫鏉傚害錛屼嬌瀹冨畬鍏ㄥ彲浠ュ疄鏃跺湴瀹炵幇錛?br>       鈶ELP鍙互鎴愬姛鍦板鍚勭涓嶅悓綾誨瀷鐨勮闊充俊鍙瘋繘琛岀紪鐮侊紝榪欑閫傚簲鎬у浜庣湡瀹炵幆澧冿紝灝ゅ叾鏄儗鏅櫔澹板瓨鍦ㄦ椂鏇翠負閲嶈銆?br>浼樼偣錛氱敤寰堜綆鐨勫甫瀹芥彁渚涗簡杈冩竻鏅扮殑璇煶<br>緙虹偣錛?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛?999騫存媧查氫俊鏍囧噯鍗忎細錛圗TSI錛夋帹鍑轟簡鍩轟簬鐮佹縺鍔辯嚎鎬ч嫻嬬紪鐮侊紙CELP錛夌殑絎笁浠gЩ鍔ㄩ氫俊璇煶緙栫爜鏍囧噯鑷傚簲澶氶熺巼璇煶緙栫爜鍣紙AMR錛夛紝鍏朵腑鏈浣庨熺巼涓?.75kb/s錛岃揪鍒伴氫俊璐ㄩ噺銆侰ELP 鐮佹縺鍔辯嚎鎬ч嫻嬬紪鐮佹槸Code Excited Linear Prediction鐨勭緝鍐欍侰ELP鏄繎10騫存潵鏈鎴愬姛鐨勮闊崇紪鐮佺畻娉曘?br>       CELP璇煶緙栫爜綆楁硶鐢ㄧ嚎鎬ч嫻嬫彁鍙栧0閬撳弬鏁幫紝鐢ㄤ竴涓寘鍚澶氬吀鍨嬬殑嬋鍔辯煝閲忕殑鐮佹湰浣滀負嬋鍔卞弬鏁幫紝姣忔緙栫爜鏃墮兘鍦ㄨ繖涓爜鏈腑鎼滅儲涓涓渶浣崇殑嬋鍔辯煝閲忥紝榪欎釜嬋鍔辯煝閲忕殑緙栫爜鍊煎氨鏄繖涓簭鍒楃殑鐮佹湰涓殑搴忓彿銆?br>       CELP宸茬粡琚澶氳闊崇紪鐮佹爣鍑嗘墍閲囩敤錛岀編鍥借仈閭︽爣鍑咶S1016灝辨槸閲囩敤CELP鐨勭紪鐮佹柟娉曪紝涓昏鐢ㄤ簬楂樿川閲忕殑紿勫甫璇煶淇濆瘑閫氫俊銆侰ELP (Code-Excited Linear Prediction) 榪欐槸涓涓畝鍖栫殑 LPC 綆楁硶錛屼互鍏朵綆姣旂壒鐜囪憲縐?(4800-9600Kbps)錛屽叿鏈夊緢娓呮櫚鐨勮闊沖搧璐ㄥ拰寰堥珮鐨勮儗鏅櫔闊沖厤鐤с侰ELP鏄竴縐嶅湪涓綆閫熺巼涓婂箍娉涗嬌鐢ㄧ殑璇煶鍘嬬緝緙栫爜鏂規銆?br>                                                                                                          <br><br><span style="COLOR: red">G.711<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?4Kbps<br>鐗規э細綆楁硶澶嶆潅搴﹀皬錛岄煶璐ㄤ竴鑸?br>浼樼偣錛氱畻娉曞鏉傚害浣庯紝鍘嬬緝姣斿皬錛圕D闊寵川>400kbps錛夛紝緙栬В鐮佸歡鏃舵渶鐭紙鐩稿鍏跺畠鎶鏈級<br>緙虹偣錛氬崰鐢ㄧ殑甯﹀杈冮珮<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛?0騫翠唬CCITT鍏竷鐨凣.711 64kb/s鑴夊啿緙栫爜璋冨埗PCM銆?br>                                                                                                            <br><br><span style="COLOR: red">G.721</span><br>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?2Kbps<br>鐗規э細鐩稿浜嶱CMA鍜孭CMU錛屽叾鍘嬬緝姣旇緝楂橈紝鍙互鎻愪緵2錛?鐨勫帇緙╂瘮銆?br>浼樼偣錛氬帇緙╂瘮澶?br>緙虹偣錛氬0闊寵川閲忎竴鑸?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛氬瓙甯DPCM錛圫B-ADPCM錛夋妧鏈侴.721鏍囧噯鏄竴涓唬鐮佽漿鎹㈢郴緇熴傚畠浣跨敤ADPCM杞崲鎶鏈紝瀹炵幇64 kb/s A寰嬫垨μ寰婸CM閫熺巼鍜?2 kb/s閫熺巼涔嬮棿鐨勭浉浜掕漿鎹€?/div> <dt>  <dd> <div><br><span style="COLOR: red">G.722</span><br>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?4Kbps<br>鐗規э細G722鑳芥彁渚涢珮淇濈湡鐨勮闊寵川閲?br>浼樼偣錛氶煶璐ㄥソ<br>緙虹偣錛氬甫瀹借姹傞珮<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛氬瓙甯DPCM錛圫B-ADPCM錛夋妧鏈?br>                                                                                                              <br><br><span style="COLOR: red">G.723(浣庣爜鐜囪闊崇紪鐮佺畻娉?<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?.3Kbps/6.3Kbps<br>鐗規э細璇煶璐ㄩ噺鎺ヨ繎鑹紝甯﹀瑕佹眰浣庯紝楂樻晥瀹炵幇錛屼究浜庡璺墿灞曪紝鍙埄鐢–5402鐗囧唴16kRAM瀹炵幇53coder銆傝揪鍒癐TU-TG723瑕佹眰鐨勮闊寵川閲忥紝鎬ц兘紼沖畾銆傚彲鐢ㄤ簬IP鐢佃瘽璇煶淇℃簮緙栫爜鎴栭珮鏁堣闊沖帇緙╁瓨鍌ㄣ?br>浼樼偣錛氱爜鐜囦綆錛屽甫瀹借姹傝緝灝忋傚茍杈懼埌ITU-TG723瑕佹眰鐨勮闊寵川閲忥紝鎬ц兘紼沖畾銆?br>緙虹偣錛氬0闊寵川閲忎竴鑸?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛欸.723璇煶緙栫爜鍣ㄦ槸涓縐嶇敤浜庡濯掍綋閫氫俊錛岀紪鐮侀熺巼涓?.3kbits/s鍜?.3kbit/s鐨勫弻鐮佺巼緙栫爜鏂規銆侴.723鏍囧噯鏄浗闄呯數淇¤仈鐩燂紙ITU錛夊埗瀹氱殑澶氬獟浣撻氫俊鏍囧噯涓殑涓涓粍鎴愰儴鍒嗭紝鍙互搴旂敤浜嶪P鐢佃瘽絳夌郴緇熶腑銆傚叾涓紝5.3kbits/s鐮佺巼緙栫爜鍣ㄩ噰鐢ㄥ鑴夊啿鏈澶т技鐒墮噺鍖栨妧鏈紙MP錛峂LQ錛夛紝6.3kbits/s鐮佺巼緙栫爜鍣ㄩ噰鐢ㄤ唬鏁扮爜嬋鍔辯嚎鎬ч嫻嬫妧鏈?br>                                                                                                             <br><br><span style="COLOR: red">G.723.1(鍙岄熺巼璇煶緙栫爜綆楁硶)<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?.3Kbps(22.9)<br>鐗規э細鑳藉瀵歸煶涔愬拰鍏朵粬闊抽淇″彿榪涜鍘嬬緝鍜岃В鍘嬬緝錛屼絾瀹冨璇煶淇″彿鏉ヨ鏄渶浼樼殑銆侴.723.1閲囩敤浜嗘墽琛屼笉榪炵畫浼犺緭鐨勯潤闊沖帇緙╋紝榪欏氨鎰忓懗鐫鍦ㄩ潤闊蟲湡闂寸殑姣旂壒嫻佷腑鍔犲叆浜嗕漢涓虹殑鍣0銆傞櫎浜嗛鐣欏甫瀹戒箣澶栵紝榪欑鎶鏈嬌鍙戜俊鏈虹殑璋冨埗瑙h皟鍣ㄤ繚鎸佽繛緇伐浣滐紝騫朵笖閬垮厤浜嗚澆娉俊鍙風殑鏃墮氭椂鏂?br>浼樼偣錛氱爜鐜囦綆錛屽甫瀹借姹傝緝灝忋傚茍杈懼埌ITU-TG723瑕佹眰鐨勮闊寵川閲忥紝鎬ц兘紼沖畾,閬垮厤浜嗚澆娉俊鍙風殑鏃墮氭椂鏂?br>緙虹偣錛氳闊寵川閲忎竴鑸?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛欸.723.1綆楁硶鏄?ITU-T寤鴻鐨勫簲鐢ㄤ簬浣庨熺巼澶氬獟浣撴湇鍔′腑璇煶鎴栧叾瀹冮煶棰戜俊鍙風殑鍘嬬緝綆楁硶錛屽叾鐩爣搴旂敤緋葷粺鍖呮嫭H.323銆丠.324絳夊濯掍綋閫氫俊緋葷粺 銆傜洰鍓嶈綆楁硶宸叉垚涓篒P鐢佃瘽緋葷粺涓殑蹇呴夌畻娉曚箣涓銆?br>                                                                                                                <br><br><span style="COLOR: red">G.728<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?6Kbps/8Kbps<br>鐗規э細鐢ㄤ簬IP鐢佃瘽銆佸崼鏄熼氫俊銆佽闊沖瓨鍌ㄧ瓑澶氫釜棰嗗煙銆侴.728鏄竴縐嶄綆鏃跺歡緙栫爜鍣紝浣嗗畠姣斿叾瀹冪殑緙栫爜鍣ㄩ兘澶嶆潅錛岃繖鏄洜涓哄湪緙栫爜鍣ㄤ腑蹇呴』閲嶅鍋?0闃禠PC鍒嗘瀽銆侴.728榪橀噰鐢ㄤ簡鑷傚簲鍚庣疆婊ゆ嘗鍣ㄦ潵鎻愰珮鍏舵ц兘銆?br>浼樼偣錛氬悗鍚戣嚜閫傚簲錛岄噰鐢ㄨ嚜閫傚簲鍚庣疆婊ゆ嘗鍣ㄦ潵鎻愰珮鍏舵ц兘<br>緙虹偣錛氭瘮鍏跺畠鐨勭紪鐮佸櫒閮藉鏉?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛欸.728 16kb/s鐭歡鏃剁爜鏈縺鍔辯嚎鎬ч嫻嬬紪鐮侊紙LD-CELP錛夈?996騫碔TU鍏竷浜咷.728 8kb/s鐨凜S錛岮CELP綆楁硶錛屽彲浠ョ敤浜嶪P鐢佃瘽銆佸崼鏄熼氫俊銆佽闊沖瓨鍌ㄧ瓑澶氫釜棰嗗煙銆?6 kbps G.728浣庢椂寤剁爜嬋鍔辯嚎鎬ч嫻嬨?<br>       G.728鏄綆姣旂壒綰挎ч嫻嬪悎鎴愬垎鏋愮紪鐮佸櫒錛圙.729鍜孏.723.1錛夊拰鍚庡悜ADPCM緙栫爜鍣ㄧ殑娣峰悎浣撱侴.728鏄疞D-CELP緙栫爜鍣紝瀹冧竴嬈″彧澶勭悊5涓牱鐐廣傚浜庝綆閫熺巼錛?6~128 kbps錛夌殑緇煎悎涓氬姟鏁板瓧緗戯紙ISDN錛夊彲瑙嗙數璇濓紝G.728鏄竴縐嶅緩璁噰鐢ㄧ殑璇煶緙栫爜鍣ㄣ傜敱浜庡叾鍚庡悜鑷傚簲鐗規э紝鍥犳G.728鏄竴縐嶄綆鏃跺歡緙栫爜鍣紝浣嗗畠姣斿叾瀹冪殑緙栫爜鍣ㄩ兘澶嶆潅錛岃繖鏄洜涓哄湪緙栫爜鍣ㄤ腑蹇呴』閲嶅鍋?0闃禠PC鍒嗘瀽銆侴.728榪橀噰鐢ㄤ簡鑷傚簲鍚庣疆婊ゆ嘗鍣ㄦ潵鎻愰珮鍏舵ц兘銆?/div> <dt>  <dd> <div><br><span style="COLOR: red">G.729<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?Kbps<br>鐗規э細鍦ㄨ壇濂界殑淇¢亾鏉′歡涓嬭杈懼埌闀胯瘽璐ㄩ噺錛屽湪鏈夐殢鏈烘瘮鐗硅鐮併佸彂鐢熷撫涓㈠け鍜屽嬈¤漿鎺ョ瓑鎯呭喌涓嬭鏈夊緢濂界殑紼沖仴鎬х瓑銆傝繖縐嶈闊沖帇緙╃畻娉曞彲浠ュ簲鐢ㄥ湪寰堝箍娉涚殑棰嗗煙涓紝鍖呮嫭錛╋及鐢佃瘽銆佹棤綰塊氫俊銆佹暟瀛楀崼鏄熺郴緇熷拰鏁板瓧涓撶敤綰胯礬銆?br>       G.729綆楁硶閲囩敤“鍏辮江緇撴瀯浠f暟鐮佹湰嬋鍔辯嚎鎬ч嫻嬬紪鐮佹柟妗?#8221;錛圕S-ACELP錛夌畻娉曘傝繖縐嶇畻娉曠患鍚堜簡娉㈠艦緙栫爜鍜屽弬鏁扮紪鐮佺殑浼樼偣錛屼互鑷傚簲棰勬祴緙栫爜鎶鏈負鍩虹錛岄噰鐢ㄤ簡鐭㈤噺閲忓寲銆佸悎鎴愬垎鏋愬拰鎰熻鍔犳潈絳夋妧鏈?br>       G.729緙栫爜鍣ㄦ槸涓轟綆鏃跺歡搴旂敤璁捐鐨勶紝瀹冪殑甯ч暱鍙湁10ms錛屽鐞嗘椂寤朵篃鏄?0ms錛屽啀鍔犱笂5ms鐨勫墠瑙嗭紝榪欏氨浣垮緱G.729浜х敓鐨勭偣鍒扮偣鐨勬椂寤朵負25ms錛屾瘮鐗圭巼涓? kbps銆?br>浼樼偣錛氳闊寵川閲忚壇錛屽簲鐢ㄩ鍩熷緢騫挎硾錛岄噰鐢ㄤ簡鐭㈤噺閲忓寲銆佸悎鎴愬垎鏋愬拰鎰熻鍔犳潈錛屾彁渚涗簡瀵瑰撫涓㈠け鍜屽垎緇勪涪澶辯殑闅愯棌澶勭悊鏈哄埗<br>緙虹偣錛氬湪澶勭悊闅忔満姣旂壒閿欒鏂歸潰鎬ц兘涓嶅ソ銆?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛氬浗闄呯數淇¤仈鐩燂紙ITU-T錛変簬1995騫?1鏈堟寮忛氳繃浜咷.729銆?ITU-T寤鴻G.729涔熻縐頒綔“鍏辮江緇撴瀯浠f暟鐮佹湰嬋鍔辯嚎鎬ч嫻嬬紪鐮佹柟妗?#8221;(CS-ACELP)錛屽畠鏄綋鍓嶈緝鏂扮殑涓縐嶈闊沖帇緙╂爣鍑嗐侴.729鏄敱緹庡浗銆佹硶鍥姐佹棩鏈拰鍔犳嬁澶х殑鍑犲钁楀悕鍥介檯鐢典俊瀹炰綋鑱斿悎寮鍙戠殑銆?br>                                                                                                               <br><br><span style="COLOR: red">G.729A<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細ITU-T<br>鎵闇棰戝錛?Kbps(34.4)<br>鐗規э細澶嶆潅鎬ц緝G.729浣庯紝鎬ц兘杈僄.729宸?br>浼樼偣錛氳闊寵川閲忚壇錛岄檷浣庝簡璁$畻鐨勫鏉傚害浠ヤ究浜庡疄鏃跺疄鐜幫紝鎻愪緵浜嗗甯т涪澶卞拰鍒嗙粍涓㈠け鐨勯殣钘忓鐞嗘満鍒?br>緙虹偣錛氭ц兘杈僄.729宸?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛?6騫碔TU-T鍙堝埗瀹氫簡G.729鐨勭畝鍖栨柟妗圙.729A錛屼富瑕侀檷浣庝簡璁$畻鐨勫鏉傚害浠ヤ究浜庡疄鏃跺疄鐜幫紝鍥犳鐩墠浣跨敤鐨勯兘鏄疓.729A銆?br>                                                                                                       <br><br><span style="COLOR: red">GIPS<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細鐟炲吀Global IP Sound鍏徃<br>鎵闇棰戝錛?br>鐗規э細GIPS鎶鏈彲鏍規嵁甯﹀鐘跺喌鑷姩璋冭妭緙栫爜鐮佺巼錛屾彁渚涗綆鐮佺巼楂樿川閲忕殑闊抽銆侴IPS鐨勬牳蹇冩妧鏈紙緗戠粶鑷傚簲綆楁硶錛屼涪鍖呰ˉ鍋跨畻娉曞拰鍥炲0娑堥櫎綆楁硶錛夊彲寰堝ソ鍦拌В鍐寵闊沖歡榪熶笌鍥炲0闂錛屽甫鏉ュ畬緹庨煶璐紝鎻愪緵姣旂數璇濊繕娓呮櫚鐨勮闊抽氳瘽鏁堟灉銆?br>浼樼偣錛氬緢濂藉湴瑙e喅璇煶寤惰繜涓庡洖澹伴棶棰橈紝甯︽潵瀹岀編闊寵川錛屾彁渚涙瘮鐢佃瘽榪樻竻鏅扮殑璇煶閫氳瘽鏁堟灉<br>緙虹偣錛?涓嶆槸Free<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氭瘡騫存敮浠樹竴絎斾嬌鐢ㄦ潈璐圭敤<br>澶囨敞錛欸IPS闊抽鎶鏈槸鐢辨潵鑷憺鍏哥殑鍏ㄧ悆欏跺皷鐨勮闊沖鐞嗛珮縐戞妧鍏徃--"GLOBAL IP SOUND"鎻愪緵鐨勪笓鐢ㄤ簬浜掕仈緗戠殑璇煶鍘嬬緝寮曟搸緋葷粺銆侴IPS鎶鏈彲鏍規嵁甯﹀鐘跺喌鑷姩璋冭妭緙栫爜鐮佺巼錛屾彁渚涗綆鐮佺巼楂樿川閲忕殑闊抽銆侴IPS鐨勬牳蹇冩妧鏈紙緗戠粶鑷傚簲綆楁硶錛屼涪鍖呰ˉ鍋跨畻娉曞拰鍥炲0娑堥櫎綆楁硶錛夊彲寰堝ソ鍦拌В鍐寵闊沖歡榪熶笌鍥炲0闂錛屽甫鏉ュ畬緹庨煶璐紝鎻愪緵姣旂數璇濊繕娓呮櫚鐨勮闊抽氳瘽鏁堟灉銆?br>                                                                                                          <br><br><span style="COLOR: red">Apt-X</span><br>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細Audio Processing Technology 鍏徃<br>鎵闇棰戝錛?0Hz to 22.5 kHz錛?6kbit/s to 576 kbit/s(16 bit 7.5 kHz mono to 24-bit, 22.5kHz stereo)<br>鐗規э細涓昏鐢ㄤ簬涓撲笟闊抽棰嗗煙錛屾彁渚涢珮鍝佽川鐨勯煶棰戙傚叾鐗圭偣鏄細<br>       鈶犻噰鐢?:1:4鐨勫帇緙╀笌鏀懼ぇ鏂規錛?br>       鈶$‖浠朵綆澶嶆潅搴︼紱<br>       鈶㈡瀬浣庣殑緙栫爜寤惰繜錛?br>       鈶g敱鍗曡姱鐗囧疄鐜幫紱<br>       鈶ゅ崟澹伴亾鎴栫珛浣撳0緙栬В鐮侊紱<br>       鈶ュ彧闇鍗曡澶囧嵆鍙疄鐜?2.5kHz鐨勫弻閫氶亾绔嬩綋澹幫紱<br>       鈶﹂珮杈?8kHz鐨勯噰鏍烽鐜囷紱<br>       鈶у閿欐уソ錛?br>       鈶ㄥ畬鏁寸殑AUTOSYNC™緙栬В鐮佸悓姝ユ柟妗堬紱<br>       鈶╀綆鍔熺巼娑堣?br>浼樼偣錛氶珮鍝佽川鐨勯煶棰戯紝紜歡澶嶆潅搴︿綆錛岃澶囪姹備綆<br>緙虹偣錛氫笉鏄疐ree<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氫竴嬈℃т粯璐?br>澶囨敞錛氬瓙甯DPCM錛圫B-ADPCM錛夋妧鏈?/div> <dt>  <dd> <div><br><span style="COLOR: red">NICAM(Near Instantaneous Companded Audio Multiplex 鍑嗙灛鏃跺帇鎵╅煶棰戝鐢?<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細鑻卞浗BBC騫挎挱鍏徃<br>鎵闇棰戝錛?28Kbps<br>鐗規э細搴旂敤鑼冨洿鍙婂叾騫挎硾錛屽彲鐢ㄥ畠榪涜绔嬩綋澹版垨鍙岃騫挎挱<br>浼樼偣錛氬簲鐢ㄨ寖鍥村強鍏跺箍娉涳紝淇″櫔姣旈珮錛屽姩鎬佽寖鍥村銆侀煶璐ㄥ悓CD鐩稿緹庯紝鏁呭悕涓介煶錛屽洜姝ICAM鍙堢О涓轟附闊?br>緙虹偣錛氫笉鏄疐ree錛岄瀹借姹傞珮<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氫竴嬈℃т粯璐?br>澶囨敞錛歂ICAM涔熺О涓介煶錛屽畠鏄嫳鏂嘚ear-Instantaneously Companded Audio Multiplex鐨勭緝鍐欙紝鍏跺惈涔変負鍑嗙灛鏃跺帇鎵╅煶棰戝鐢紝鏄敱鑻卞浗BBC騫挎挱鍏徃寮鍙戠爺絀舵垚鍔熺殑銆?br>       閫氫織鍦拌NICAM鎶鏈疄闄呬笂灝辨槸鍙屽0閬撴暟瀛楀0鎶鏈紝鍏跺簲鐢ㄨ寖鍥村強鍏跺箍娉涳紝鏈鍏稿瀷鐨勫簲鐢ㄤ究鏄數瑙嗗箍鎾檮鍔犲弻澹伴亾鏁板瓧澹版妧鏈紝鍒╃敤瀹冭繘琛岀珛浣撳0鎴栧弻璇箍鎾紝浠ュ厖鍒嗗埄鐢ㄧ數瑙嗛閬撶殑棰戣氨璧勬簮銆傝繖鏄湪甯歌鐢佃騫挎挱鐨勫熀紜涓婃棤闇澧炲姞璁稿鎶曡祫灝卞彲浠ュ疄鐜扮殑銆傚湪榪涜绔嬩綋澹板箍鎾椂錛屽畠鎻愰珮浜嗛煶棰戠殑淇″彿璐ㄩ噺錛屼嬌鍏舵帴榪慍D鐨勮川閲忋傝屼笖榪樺彲浠ュ埄鐢∟ICAM鎶鏈繘琛岄珮閫熸暟鎹箍鎾強鍏朵粬鏁版嵁浼犺緭鐨勫孌栨湇鍔★紝榪欏湪褰撲粖鐨勪俊鎭寲紺句細涓技涔庡氨鏄懼緱灝や負閲嶈浜嗭紒<br>                                                                                                       <br><br><span style="COLOR: red">MPEG-1 audio layer 1</span><br>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細MPEG<br>鎵闇棰戝錛?84kbps錛堝帇緙?鍊嶏級<br>鐗規э細緙栫爜綆鍗曪紝鐢ㄤ簬鏁板瓧鐩掑紡褰曢煶紓佸甫錛?澹伴亾錛孷CD涓嬌鐢ㄧ殑闊抽鍘嬬緝鏂規灝辨槸MPEG-1灞傗厾銆?br>浼樼偣錛氬帇緙╂柟寮忕浉瀵規椂鍩熷帇緙╂妧鏈岃█瑕佸鏉傚緱澶氾紝鍚屾椂緙栫爜鏁堢巼銆佸0闊寵川閲忎篃澶у箙鎻愰珮錛岀紪鐮佸歡鏃剁浉搴斿鍔犮傚彲浠ヨ揪鍒?#8220;瀹屽叏閫忔槑”鐨勫0闊寵川閲忥紙EBU闊寵川鏍囧噯錛?br>緙虹偣錛氶瀹借姹傝緝楂?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛歁PEG-1澹伴煶鍘嬬緝緙栫爜鏄浗闄呬笂絎竴涓珮淇濈湡澹伴煶鏁版嵁鍘嬬緝鐨勫浗闄呮爣鍑嗭紝瀹冨垎涓轟笁涓眰嬈★細<br>--灞?(Layer 1)錛氱紪鐮佺畝鍗曪紝鐢ㄤ簬鏁板瓧鐩掑紡褰曢煶紓佸甫<br>--灞?(Layer 2)錛氱畻娉曞鏉傚害涓瓑錛岀敤浜庢暟瀛楅煶棰戝箍鎾?DAB)鍜孷CD絳?br>--灞?(Layer 3)錛氱紪鐮佸鏉傦紝鐢ㄤ簬浜掕仈緗戜笂鐨勯珮璐ㄩ噺澹伴煶鐨勪紶杈擄紝濡侻P3闊充箰鍘嬬緝10鍊?br>                                                                                                             <br><br><span style="COLOR: red">MUSICAM(MPEG-1 audio layer 2,鍗矼P2)</span><br>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細MPEG<br>鎵闇棰戝錛?56锝?92kbps錛堝帇緙?锝?鍊嶏級<br>鐗規э細綆楁硶澶嶆潅搴︿腑絳夛紝鐢ㄤ簬鏁板瓧闊抽騫挎挱(DAB)鍜孷CD絳夛紝2澹伴亾錛岃孧USICAM鐢變簬鍏墮傚綋鐨勫鏉傜▼搴﹀拰浼樼鐨勫0闊寵川閲忥紝鍦ㄦ暟瀛楁紨鎾銆丏AB銆丏VB絳夋暟瀛楄妭鐩殑鍒朵綔銆佷氦鎹€佸瓨鍌ㄣ佷紶閫佷腑寰楀埌騫挎硾搴旂敤銆?br>浼樼偣錛氬帇緙╂柟寮忕浉瀵規椂鍩熷帇緙╂妧鏈岃█瑕佸鏉傚緱澶氾紝鍚屾椂緙栫爜鏁堢巼銆佸0闊寵川閲忎篃澶у箙鎻愰珮錛岀紪鐮佸歡鏃剁浉搴斿鍔犮傚彲浠ヨ揪鍒?#8220;瀹屽叏閫忔槑”鐨勫0闊寵川閲忥紙EBU闊寵川鏍囧噯錛?br>緙虹偣錛?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛氬悓MPEG-1 audio layer 1<br>                                                                                                   <br><br><span style="COLOR: red">MP3(MPEG-1 audio layer 3)<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細MPEG<br>鎵闇棰戝錛?28锝?12kbps錛堝帇緙?0锝?2鍊嶏級<br>鐗規э細緙栫爜澶嶆潅錛岀敤浜庝簰鑱旂綉涓婄殑楂樿川閲忓0闊崇殑浼犺緭錛屽MP3闊充箰鍘嬬緝10鍊嶏紝2澹伴亾銆侻P3鏄湪緇煎悎MUSICAM鍜孉SPEC鐨勪紭鐐圭殑鍩虹涓婃彁鍑虹殑娣峰悎鍘嬬緝鎶鏈紝鍦ㄥ綋鏃剁殑鎶鏈潯浠朵笅錛孧P3鐨勫鏉傚害鏄懼緱鐩稿杈冮珮錛岀紪鐮佷笉鍒╀簬瀹炴椂錛屼絾鐢變簬MP3鍦ㄤ綆鐮佺巼鏉′歡涓嬮珮姘村噯鐨勫0闊寵川閲忥紝浣垮緱瀹冩垚涓鴻蔣瑙e帇鍙婄綉緇滃箍鎾殑瀹犲効銆?br>浼樼偣錛氬帇緙╂瘮楂橈紝閫傚悎鐢ㄤ簬浜掕仈緗戜笂鐨勪紶鎾?br>緙虹偣錛歁P3鍦?28KBitrate鍙婁互涓嬫椂錛屼細鍑虹幇鏄庢樉鐨勯珮棰戜涪澶?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛欶ree<br>澶囨敞錛氬悓MPEG-1 audio layer 1<br><br><span style="COLOR: red">MPEG-2 audio layer</span><br>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細MPEG<br>鎵闇棰戝錛氫笌MPEG-1灞?錛屽眰2錛屽眰3鐩稿悓<br>鐗規э細MPEG-2鐨勫0闊沖帇緙╃紪鐮侀噰鐢ㄤ笌MPEG-1澹伴煶鐩稿悓鐨勭紪璇戠爜鍣紝灞?, 灞?鍜屽眰3鐨勭粨鏋勪篃鐩稿悓錛屼絾瀹冭兘鏀寔5.1澹伴亾鍜?.1澹伴亾鐨勭幆緇曠珛浣撳0銆?br>浼樼偣錛氭敮鎸?.1澹伴亾鍜?.1澹伴亾鐨勭幆緇曠珛浣撳0<br>緙虹偣錛?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氭寜涓敹鍙?br>澶囨敞錛歁PEG-2鐨勫0闊沖帇緙╃紪鐮侀噰鐢ㄤ笌MPEG-1澹伴煶鐩稿悓鐨勭紪璇戠爜鍣紝灞?, 灞?鍜屽眰3鐨勭粨鏋勪篃鐩稿悓錛屼絾瀹冭兘鏀寔5.1澹伴亾鍜?.1澹伴亾鐨勭幆緇曠珛浣撳0銆?/div> <dt>  <dd> <div><br><span style="COLOR: red">AAC(Advanced Audio Coding錛屽厛榪涢煶棰戠紪鐮?<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細MPEG<br>鎵闇棰戝錛?6-128 kbps<br>鐗規э細AAC鍙互鏀寔1鍒?8璺箣闂翠換鎰忔暟鐩殑闊抽澹伴亾緇勫悎銆佸寘鎷?5璺綆棰戞晥鏋滃0閬撱侀厤闊?澶氳闊沖0閬擄紝浠ュ強15璺暟鎹傚畠鍙悓鏃朵紶閫?6濂楄妭鐩紝姣忓鑺傜洰鐨勯煶棰戝強鏁版嵁緇撴瀯鍙換鎰忚瀹氥?br>       AAC涓昏鍙兘鐨勫簲鐢ㄨ寖鍥撮泦涓湪鍥犵壒緗戠綉緇滀紶鎾佹暟瀛楅煶棰戝箍鎾紝鍖呮嫭鍗槦鐩存挱鍜屾暟瀛桝M銆佷互鍙婃暟瀛楃數瑙嗗強褰遍櫌緋葷粺絳夋柟闈€侫AC浣跨敤浜嗕竴縐嶉潪甯哥伒媧葷殑鐔電紪鐮佹牳蹇冨幓浼犺緭緙栫爜棰戣氨鏁版嵁銆傚叿鏈?8 涓富瑕侀煶棰戦氶亾錛?6 涓綆棰戝寮洪氶亾錛?6 涓泦鎴愭暟鎹祦, 16 涓厤闊籌紝16 縐嶇紪鎺掋?br>浼樼偣錛氭敮鎸佸縐嶉煶棰戝0閬撶粍鍚堬紝鎻愪緵浼樿川鐨勯煶璐?br>緙虹偣錛?<br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氫竴嬈℃ф敹璐?br>澶囨敞錛欰AC浜?997騫村艦鎴愬浗闄呮爣鍑咺SO 13818-7銆傚厛榪涢煶棰戠紪鐮侊紙Advanced Audio Coding--AAC錛夊紑鍙戞垚鍔燂紝鎴愪負緇PEG-2闊抽鏍囧噯錛圛SO/IEC13818-3錛変箣鍚庣殑鏂頒竴浠i煶棰戝帇緙╂爣鍑嗐?br>       鍦∕PEG-2鍒惰鐨勬棭鏈燂紝鏈潵鏄兂灝嗗叾闊抽緙栫爜閮ㄥ垎淇濇寔涓嶮PEG-1鍏煎鐨勩備絾鍚庢潵涓轟簡閫傚簲婕旀挱鐢佃鐨勮姹傝屽皢鍏跺畾涔夋垚涓轟竴涓彲浠ヨ幏寰楁洿楂樿川閲忕殑澶氬0閬撻煶棰戞爣鍑嗐傜悊鎵褰撶劧鍦幫紝榪欎釜鏍囧噯鏄笉鍏煎MPEG-1鐨勶紝鍥犳琚О涓篗PEG-2 AAC銆傛崲鍙ヨ瘽璇達紝浠庤〃闈笂鐪嬶紝瑕佸埗浣滃拰鎾斁AAC錛岄兘闇瑕佷嬌鐢ㄤ笌MP3瀹屽叏涓嶅悓鐨勫伐鍏楓?br>                                                                                                            <br><br><span style="COLOR: red">Dolby AC-3<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細緹庡浗鏉滄瘮鍏徃<br>鎵闇棰戝錛?4kbps<br>鐗規э細鎻愪緵鐨勭幆緇曠珛浣撳0緋葷粺鐢?涓叏棰戝甫澹伴亾鍔犱竴涓秴浣庨煶澹伴亾緇勬垚錛?涓0閬撶殑淇℃伅鍦ㄥ埗浣滃拰榪樺師榪囩▼涓叏閮ㄦ暟瀛楀寲錛屼俊鎭崯澶卞緢灝戯紝緇嗚妭涓板瘜錛屽叿鏈夌湡姝g殑绔嬩綋澹版晥鏋滐紝鍦ㄦ暟瀛楃數瑙嗐丏VD鍜屽搴獎闄腑騫挎硾浣跨敤銆?br>浼樼偣錛氱幆緇曠珛浣撳0錛屼俊鎭崯澶卞緢灝戯紝緇嗚妭涓板瘜錛屽叿鏈夌湡姝g殑绔嬩綋澹版晥鏋?br>緙虹偣錛?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氭寜涓敹鍙?br>澶囨敞錛氭潨姣旀暟瀛桝C-3錛圖olby Digital AC-3錛夛細緹庡浗鏉滄瘮鍏徃寮鍙戠殑澶氬0閬撳叏棰戝甫澹伴煶緙栫爜緋葷粺錛屽畠鎻愪緵鐨勭幆緇曠珛浣撳0緋葷粺鐢?涓叏棰戝甫澹伴亾鍔犱竴涓秴浣庨煶澹伴亾緇勬垚錛?涓0閬撶殑淇℃伅鍦ㄥ埗浣滃拰榪樺師榪囩▼涓叏閮ㄦ暟瀛楀寲錛屼俊鎭崯澶卞緢灝戯紝緇嗚妭涓板瘜錛屽叿鏈夌湡姝g殑绔嬩綋澹版晥鏋滐紝鍦ㄦ暟瀛楃數瑙嗐丏VD鍜屽搴獎闄腑騫挎硾浣跨敤銆?br>                                                                                                           <br><br><span style="COLOR: red">ASPEC錛圓udio Spectral Perceptual Entropy Coding錛?br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細AT&T<br>鎵闇棰戝錛?4kps<br>鐗規э細闊抽璐ㄩ噺鑾峰緱鏄捐憲鏀瑰杽錛屼笉榪囪綆楀鏉傚害涔熷ぇ澶ф彁楂橈紝鑰屼笖鍦ㄥ洖鍝嶃佷綆鐮佺巼鏃跺0闊寵川閲忎弗閲嶄笅闄嶃?br>浼樼偣錛氶煶棰戣川閲忚幏寰楁樉钁楁敼鍠?br>緙虹偣錛氳綆楀鏉傚害鐨勬彁楂樸傚潡杈圭晫褰卞搷銆侀璁$畻澶嶆潅搴︾殑鎻愰珮銆傚洖鍝嶃佷綆鐮佺巼鏃跺0闊寵川閲忎弗閲嶄笅闄?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氭寜涓敹鍙?br>澶囨敞錛氬彉鎹㈠帇緙╂妧鏈?br>                                                                                                  <br><br><span style="COLOR: red">PAC錛圥erceptual Audio Coder錛?br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細AT&T<br>鎵闇棰戝錛?4kps<br>鐗規э細闊抽璐ㄩ噺鑾峰緱鏄捐憲鏀瑰杽錛屼笉榪囧湪鍥炲搷銆佷綆鐮佺巼鏃跺0闊寵川閲忎弗閲嶄笅闄嶃?br>浼樼偣錛氶煶棰戣川閲忚幏寰楁樉钁楁敼鍠?br>緙虹偣錛氬潡杈圭晫褰卞搷銆侀鍥炲搷銆佷綆鐮佺巼鏃跺0闊寵川閲忎弗閲嶄笅闄?br>搴旂敤棰嗗煙錛歷oip<br>鐗堢◣鏂瑰紡錛氭寜涓敹鍙?br>澶囨敞錛氬彉鎹㈠帇緙╂妧鏈?br>                                                                                                   <br><br><span style="COLOR: red">HR</span><br>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細 椋炲埄嫻?br>鎵闇棰戝錛?Kbps<br>鐗規э細浠ュ鍔燝SM緗戠粶瀹歸噺涓虹洰鐨?浣嗘槸浼氭崯瀹寵闊寵川閲?鐢變簬鐜板湪緗戠粶棰戠巼绱х己,涓浜涘ぇ鐨勮繍钀ュ晢宸茬粡鍦ㄥぇ鍩庡競瀵嗛泦鍦板甫寮閫氭鏂瑰紡浠ュ鍔犲閲忋?br>浼樼偣錛氱郴緇熷閲忓ぇ<br>緙虹偣錛氳闊寵川閲忓樊<br>搴旂敤棰嗗煙錛欸SM<br>鐗堢◣鏂瑰紡錛氭寜涓敹璐?br>澶囨敞錛欻F鍗婇熺巼,鏄竴縐岹SM璇煶緙栫爜鏂瑰紡銆?/div> <dt>  <dd> <div><br><span style="COLOR: red">FR<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細椋炲埄嫻?br>鎵闇棰戝錛?3Kbps<br>鐗規э細鏄竴鑸殑GSM鎵嬫満鐨勯氫俊緙栫爜鏂瑰紡,鍙互鑾峰緱杈懼埌4.1宸﹀彸Qos鐨勮闊抽氫俊璐ㄩ噺(鍥介檯鐢佃仈瑙勫畾璇煶閫氫俊璐ㄩ噺Qos婊″垎涓?)<br>浼樼偣錛氳闊寵川閲忓緱鍒頒簡鎻愰珮<br>緙虹偣錛氱郴緇熷閲忛檷浣?br>搴旂敤棰嗗煙錛欸SM<br>鐗堢◣鏂瑰紡錛氭寜涓敹璐?br>澶囨敞錛欶R鍏ㄩ熺巼錛屾槸涓縐岹SM璇煶緙栫爜鏂瑰紡銆?br>                                                                               <br><br><span style="COLOR: red">EFR<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細椋炲埄嫻?br>鎵闇棰戝錛?3Kbps<br>鐗規э細鐢ㄤ簬GSM鎵嬫満鍩轟簬鍏ㄩ熺巼13Kbps鐨勮闊崇紪鐮佸拰鍙戦?鍙互鑾峰緱鏇村ソ鏇存竻鏅扮殑璇煶璐ㄩ噺(鎺ヨ繎Qos4.7),闇瑕佺綉緇滄湇鍔″晢寮閫氭欏圭綉緇滃姛鑳斤紝鎵嬫満鎵嶈兘閰嶅悎瀹炵幇銆?br>浼樼偣錛氶煶璐ㄥソ<br>緙虹偣錛氶渶瑕佺綉緇滄湇鍔″晢寮閫氭欏圭綉緇滃姛鑳斤紝涓旂郴緇熷閲忛檷浣?br>搴旂敤棰嗗煙錛欸SM<br>鐗堢◣鏂瑰紡錛氭寜涓敹璐?br>澶囨敞錛欵FR澧炲己鍨嬪叏閫熺巼,涓縐岹SM緗戠粶璇煶鐨勭紪鐮佹柟寮忋?/div> <dt>  <dd> <div><br><span style="COLOR: red">GSM-AMR(Adaptive Multi-Rate)<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細椋炲埄嫻?br>鎵闇棰戝錛?Kbps(4.75 Kbps~12.2 Kbps)<br>鐗規э細 鍙互瀵硅闊寵繘琛屾浛鎹㈠拰娑堥煶錛屽鉤婊戝櫔闊籌紝鏀寔闂存柇寮忎紶杈擄紝瀵硅闊寵繘琛屽姩鎬佷睛鏌ャ傝兘鍦ㄥ悇縐嶇綉緇滄潯浠朵笅鎻愪緵浼樿川鐨勮闊蟲晥鏋溿?br>浼樼偣錛氶煶璐ㄥ嚭鑹?br>緙虹偣錛?br>搴旂敤棰嗗煙錛欸SM<br>鐗堢◣鏂瑰紡錛氭寜涓敹璐?br>澶囨敞錛欸SM-ASM鏄竴縐嶅箍娉涗嬌鐢ㄥ湪GPRS鍜學-CDMA緗戠粶涓婄殑闊抽鏍囧噯銆傚湪瑙勮寖ETSI GSM06.90涓GSM-AMR榪涜浜嗗畾涔夈侫MR璇煶緙栫爜鏄疓SM 2+鍜學CDMA鐨勯粯璁ょ紪鐮佹爣鍑嗭紝鏄涓変唬鏃犵嚎閫氳緋葷粺鐨勮闊崇紪鐮佹爣鍑嗐侴SM-AMR鏍囧噯鍩轟簬ACELP錛堜唬鏁版縺鍔辯嚎鎬ч嫻嬶級緙栫爜銆傚畠鑳藉湪騫挎硾鐨勪紶杈撴潯浠朵笅鎻愪緵楂樺搧璐ㄧ殑璇煶鏁堟灉銆?br>                                                                                                  <br><br><span style="COLOR: red">EVRC(Enhanced Variable Rate Coder錛屽寮哄瀷鍙彉閫熺巼緙栫爜鍣?<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細緹庡浗Qualcomm閫氫俊鍏徃(鍗抽珮閫?<br>鎵闇棰戝錛?Kbps鎴?3Kbps<br>鐗規э細鏀寔涓夌鐮佺巼錛?.6 Kbps, 4.8 Kbps 鍜?1.2 Kbps錛夛紝鍣0鎶戝埗錛岄偖浠惰繃婊ゃ傝兘鍦ㄥ悇縐嶇綉緇滄潯浠朵笅鎻愪緵浼樿川鐨勮闊蟲晥鏋溿?br>浼樼偣錛氶煶璐ㄥ嚭鑹?br>緙虹偣錛?br>搴旂敤棰嗗煙錛欳DMA<br>鐗堢◣鏂瑰紡錛氭寜涓敹璐?br>澶囨敞錛欵VRC緙栫爜騫挎硾浣跨敤浜嶤DMA緗戠粶銆侲VRC鏍囧噯閬靛驚瑙勮寖TIA IS-127鐨勫唴瀹廣侲VRC緙栫爜鍩轟簬RCELP錛堟澗寮涚爜嬋鍔辯嚎鎬ч嫻嬶級鏍囧噯銆傝緙栫爜鍙互浠ate 1錛?71bits/packet錛夛紝Rate 1/2錛?0bits/packet錛夋垨鏄疪ate 1/8錛?6bits/packet錛夌殑瀹歸噺榪涜鎿嶄綔銆傚湪瑕佹眰涓嬶紝瀹冧篃鑳戒駭鐢熺┖鍖咃紙0bits/packet錛夈?/div> <dt>  <dd> <div><br><span style="COLOR: red">QCELP(QualComm Code Excited Linear Predictive錛屽彈嬋綰挎ч嫻嬬紪鐮?<br></span>綾誨瀷錛欰udio<br>鍒跺畾鑰咃細緹庡浗Qualcomm閫氫俊鍏徃(鍗抽珮閫?<br>鎵闇棰戝錛?k鐨勮闊崇紪鐮佺畻娉?鍙伐浣滀簬4/4.8/8/9.6Kbps絳夊浐瀹氶熺巼涓婏紝鑰屼笖鍙彉閫熺巼鍦板伐浣滀簬800Kbps锝?600Kbps涔嬮棿)<br>鐗規э細浣跨敤閫傚綋鐨勯棬闄愬兼潵鍐沖畾鎵闇閫熺巼銆俀CELP鏄竴縐?k鐨勮闊崇紪鐮佺畻娉?鍙互鍦?k鐨勯熺巼涓嬫彁渚涙帴榪?3k鐨勮瘽闊沖帇緙╄川閲?銆傝繖鏄竴縐嶅彲鍙橀熺巼璇濋煶緙栫爜錛屾牴鎹漢鐨勮璇濈壒鎬э紙澶у搴旇鑳藉浣撲細鎴戜滑鏃ュ父鐨勬矡閫氬拰浜ゆ祦鏃跺茍涓嶆槸涓鐩翠繚鎸佹煇縐嶆亽瀹氱殑鏂瑰紡璁茶瘽錛屾湁闂存柇銆佹湁涓嶅悓鐨勫0闊抽鐜囩瓑閮芥槸浜虹殑鑷劧琛ㄨ揪錛夎岄噰鍙栫殑涓縐嶄紭鍖栨妧鏈?br>浼樼偣錛氳瘽闊蟲竻鏅般佽儗鏅櫔澹板皬錛岀郴緇熷閲忓ぇ<br>緙虹偣錛?涓嶆槸Free<br>搴旂敤棰嗗煙錛欳DMA<br>鐗堢◣鏂瑰紡錛氭瘡騫存敮浠樹竴絎斾嬌鐢ㄦ潈璐圭敤<br>澶囨敞錛歈CELP錛屽嵆QualComm Code Excited Linear Predictive錛圦ualComm鍙楁縺綰挎ч嫻嬬紪鐮侊級銆傜編鍥絈ualcomm閫氫俊鍏徃鐨勪笓鍒╄闊崇紪鐮佺畻娉曪紝鏄寳緹庣浜屼唬鏁板瓧縐誨姩鐢佃瘽錛圕DMA錛夌殑璇煶緙栫爜鏍囧噯錛圛S95錛夈傝繖縐嶇畻娉曚笉浠呭彲宸ヤ綔浜?/4.8/8/9.6kbit錛弒絳夊浐瀹氶熺巼涓婏紝鑰屼笖鍙彉閫熺巼鍦板伐浣滀簬800bit錛弒锝?600bit錛弒涔嬮棿銆俀CELP綆楁硶琚涓烘槸鍒扮洰鍓嶄負姝㈡晥鐜囨晥鐜囨渶楂樼殑涓縐嶇畻娉曪紝瀹冪殑涓昏鐗圭偣涔嬩竴錛屾槸浣跨敤閫傚綋鐨勯棬闄愬兼潵鍐沖畾鎵闇閫熺巼銆侷‘1闄愬兼噲鏅櫔澹扮數騫沖彉鍖栬屽彉鍖栵紝榪欐牱灝辨姂鍒朵簡鑳屾櫙鍣0錛屼嬌寰楀嵆浣垮湪鍠ч椆鐨勭幆澧冧腑錛屼篃鑳藉緱鍒拌壇濂界殑璇濋煶璐ㄩ噺錛?CDMA8Kbit/s鐨勮瘽闊寵繎浼糋SM 13Mbit/s鐨勮瘽闊熾侰DMA閲囩敤QCELP緙栫爜絳変竴緋誨垪鎶鏈紝鍏鋒湁璇濋煶娓呮櫚銆佽儗鏅櫔澹板皬絳変紭鍔匡紝鍏舵ц兘鏄庢樉 浼樹簬鍏朵粬鏃犵嚎縐誨姩閫氫俊緋葷粺錛岃闊寵川閲忓彲浠ヤ笌鏈夌嚎鐢佃瘽濯茬編銆?鏃犵嚎杈愬皠浣庛?/div> </dd> <img src ="http://m.shnenglu.com/gtwdaizi/aggbug/41884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/gtwdaizi/" target="_blank">閮ぉ鏂?/a> 2008-01-25 13:29 <a href="http://m.shnenglu.com/gtwdaizi/articles/41884.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C++瀛楃涓插畬鍏ㄦ寚寮曚箣涓 鈥斺?Win32 瀛楃緙栫爜http://m.shnenglu.com/gtwdaizi/articles/39809.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Fri, 28 Dec 2007 01:54:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/39809.htmlhttp://m.shnenglu.com/gtwdaizi/comments/39809.htmlhttp://m.shnenglu.com/gtwdaizi/articles/39809.html#Feedback0http://m.shnenglu.com/gtwdaizi/comments/commentRss/39809.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/39809.html

    C++瀛楃涓插畬鍏ㄦ寚寮曚箣涓 鈥斺?Win32 瀛楃緙栫爜


    鍘熻憲錛歁ichael Dunn

    緲昏瘧錛?a href="mailto:cjsun@insun.hit.edu.cn">Chengjie Sun



    鍘熸枃鍑哄錛?font color=#0000ff size=2>CodeProject錛歍he Complete Guide to C++ Strings, Part I

    寮曡█

    銆銆姣棤鐤戦棶錛屾垜浠兘鐪嬪埌榪囧儚 TCHAR, std::string, BSTR 絳夊悇縐嶅悇鏍風殑瀛楃涓茬被鍨嬶紝榪樻湁閭d簺浠?_tcs 寮澶寸殑濂囨殑瀹忋備綘涔熻姝e湪鐩潃鏄劇ず鍣ㄥ彂鎰併傛湰鎸囧紩灝嗘葷粨寮曡繘鍚勭瀛楃綾誨瀷鐨勭洰鐨勶紝灞曠ず涓浜涚畝鍗曠殑鐢ㄦ硶錛屽茍鍛婅瘔鎮ㄥ湪蹇呰鏃訛紝濡備綍瀹炵幇鍚勭瀛楃涓茬被鍨嬩箣闂寸殑杞崲銆?br>銆銆鍦ㄧ涓閮ㄥ垎錛屾垜浠皢浠嬬粛3縐嶅瓧絎︾紪鐮佺被鍨嬨備簡瑙e悇縐嶇紪鐮佹ā寮忕殑宸ヤ綔鏂瑰紡鏄緢閲嶈鐨勪簨鎯呫傚嵆浣夸綘宸茬粡鐭ラ亾涓涓瓧絎︿覆鏄竴涓瓧絎︽暟緇勶紝浣犱篃搴旇闃呰鏈儴鍒嗐備竴鏃︿綘浜嗚В浜嗚繖浜涳紝浣犲皢瀵瑰悇縐嶅瓧絎︿覆綾誨瀷涔嬮棿鐨勫叧緋繪湁涓涓竻妤氬湴浜嗚В銆?br>銆銆鍦ㄧ浜岄儴鍒嗭紝鎴戜滑灝嗗崟鐙榪皊tring綾伙紝鎬庢牱浣跨敤瀹冨強瀹炵幇浠栦滑鐩鎬簰涔嬮棿鐨勮漿鎹€?br>
    瀛楃鍩虹 -- ASCII, DBCS, Unicode

    銆銆鎵鏈夌殑 string 綾婚兘鏄互C-style瀛楃涓蹭負鍩虹鐨勩侰-style 瀛楃涓叉槸瀛楃鏁扮粍銆傛墍浠ユ垜浠厛浠嬬粛瀛楃綾誨瀷銆傝繖閲屾湁3縐嶇紪鐮佹ā寮忓搴?縐嶅瓧絎︾被鍨嬨傜涓縐嶇紪鐮佺被鍨嬫槸鍗曞瓙鑺傚瓧絎﹂泦錛坰ingle-byte character set or SBCS錛夈傚湪榪欑緙栫爜妯″紡涓嬶紝鎵鏈夌殑瀛楃閮藉彧鐢ㄤ竴涓瓧鑺傝〃紺恒侫SCII鏄疭BCS銆備竴涓瓧鑺傝〃紺虹殑0鐢ㄦ潵鏍囧織SBCS瀛楃涓茬殑緇撴潫銆?br>銆銆絎簩縐嶇紪鐮佹ā寮忔槸澶氬瓧鑺傚瓧絎﹂泦錛坢ulti-byte character set or MBCS錛夈備竴涓狹BCS緙栫爜鍖呭惈涓浜涗竴涓瓧鑺傞暱鐨勫瓧絎︼紝鑰屽彟涓浜涘瓧絎﹀ぇ浜庝竴涓瓧鑺傜殑闀垮害銆傜敤鍦╓indows閲岀殑MBCS鍖呭惈涓ょ瀛楃綾誨瀷錛屽崟瀛楄妭瀛楃錛坰ingle-byte characters錛夊拰鍙屽瓧鑺傚瓧絎︼紙double-byte characters錛夈傜敱浜嶹indows閲屼嬌鐢ㄧ殑澶氬瓧鑺傚瓧絎︾粷澶ч儴鍒嗘槸涓や釜瀛楄妭闀匡紝鎵浠BCS甯歌鐢―BCS浠f浛銆?br>銆銆鍦―BCS緙栫爜妯″紡涓紝涓浜涚壒瀹氱殑鍊艱淇濈暀鐢ㄦ潵琛ㄦ槑浠栦滑鏄弻瀛楄妭瀛楃鐨勪竴閮ㄥ垎銆備緥濡傦紝鍦⊿hift-JIS緙栫爜涓紙涓涓父鐢ㄧ殑鏃ユ枃緙栫爜妯″紡錛夛紝0x81-0x9f涔嬮棿鍜?0xe0-oxfc涔嬮棿鐨勫艱〃紺?榪欐槸涓涓弻瀛楄妭瀛楃錛屼笅涓涓瓙鑺傛槸榪欎釜瀛楃鐨勪竴閮ㄥ垎銆?榪欐牱鐨勫艱縐頒綔"leading bytes",浠栦滑閮藉ぇ浜?x7f銆傝窡闅忓湪涓涓猯eading byte瀛愯妭鍚庨潰鐨勫瓧鑺傝縐頒綔"trail byte"銆傚湪DBCS涓紝trail byte鍙互鏄換鎰忛潪0鍊箋傚儚SBCS涓鏍鳳紝DBCS瀛楃涓茬殑緇撴潫鏍囧織涔熸槸涓涓崟瀛楄妭琛ㄧず鐨?銆?br>銆銆絎笁縐嶇紪鐮佹ā寮忔槸Unicode銆俇nicode鏄竴縐嶆墍鏈夌殑瀛楃閮戒嬌鐢ㄤ袱涓瓧鑺傜紪鐮佺殑緙栫爜妯″紡銆俇nicode瀛楃鏈夋椂涔熻縐頒綔瀹藉瓧絎︼紝鍥犱負瀹冩瘮鍗曞瓙鑺傚瓧絎﹀錛堜嬌鐢ㄤ簡鏇村鐨勫瓨鍌ㄧ┖闂達級銆傛敞鎰忥紝Unicode涓嶈兘琚湅浣淢BCS銆侻BCS鐨勭嫭鐗逛箣澶勫湪浜庡畠鐨勫瓧絎︿嬌鐢ㄤ笉鍚岄暱搴︾殑瀛楄妭緙栫爜銆俇nicode瀛楃涓蹭嬌鐢ㄤ袱涓瓧鑺傝〃紺虹殑0浣滀負瀹冪殑緇撴潫鏍囧織銆?br>銆銆鍗曞瓧鑺傚瓧絎﹀寘鍚媺涓佹枃瀛楁瘝琛紝accented characters鍙夾SCII鏍囧噯鍜孌OS鎿嶄綔緋葷粺瀹氫箟鐨勫浘褰㈠瓧絎︺傚弻瀛楄妭瀛楃琚敤鏉ヨ〃紺轟笢浜氬強涓笢鐨勮璦銆俇nicode琚敤鍦–OM鍙奧indows NT鎿嶄綔緋葷粺鍐呴儴銆?br>銆銆浣犱竴瀹氬凡緇忓緢鐔熸倝鍗曞瓧鑺傚瓧絎︺傚綋浣犱嬌鐢╟har鏃訛紝浣犲鐞嗙殑鏄崟瀛楄妭瀛楃銆傚弻瀛楄妭瀛楃涔熺敤char綾誨瀷鏉ヨ繘琛屾搷浣滐紙榪欐槸鎴戜滑灝嗕細鐪嬪埌鐨勫叧浜庡弻瀛愯妭瀛楃鐨勫緢澶氬鎬殑鍦版柟涔嬩竴錛夈俇nicode瀛楃鐢╳char_t鏉ヨ〃紺恒俇nicode瀛楃鍜屽瓧絎︿覆甯擱噺鐢ㄥ墠緙L鏉ヨ〃紺恒備緥濡傦細

    wchar_t wch = L''1''; // 2 bytes, 0x0031
                wchar_t* wsz = L"Hello"; // 12 bytes, 6 wide characters

    瀛楃鍦ㄥ唴瀛樹腑鏄庢牱瀛樺偍鐨?/strong>

    銆銆鍗曞瓧鑺傚瓧絎︿覆錛氭瘡涓瓧絎﹀崰涓涓瓧鑺傛寜欏哄簭渚濇瀛樺偍錛屾渶鍚庝互鍗曞瓧鑺傝〃紺虹殑0緇撴潫銆備緥濡傘?Bob"鐨勫瓨璐艦寮忓涓嬶細

    42 6F 62 00
    B o b BOS

    Unicode鐨勫瓨鍌ㄥ艦寮忥紝L"Bob"

    42 00 6F 00 62 00 00 00
    B o b BOS

    浣跨敤涓や釜瀛楄妭琛ㄧず鐨?鏉ュ仛緇撴潫鏍囧織銆?br>
    銆銆涓鐪肩湅涓婂幓錛孌BCS 瀛楃涓插緢鍍?SBCS 瀛楃涓詫紝浣嗘槸鎴戜滑涓浼氬効灝嗙湅鍒?DBCS 瀛楃涓茬殑寰涔嬪錛屽畠浣垮緱浣跨敤瀛楃涓叉搷浣滃嚱鏁板拰姘稿瓧絎︽寚閽堥亶鍘嗕竴涓瓧絎︿覆鏃朵細浜х敓棰勬枡涔嬪鐨勭粨鏋溿傚瓧絎︿覆" " ("nihongo")鍦ㄥ唴瀛樹腑鐨勫瓨鍌ㄥ艦寮忓涓嬶紙LB鍜孴B鍒嗗埆鐢ㄦ潵琛ㄧず leading byte 鍜?trail byte錛?/p>
    93 FA 96 7B 8C EA 00
    LB TB LB TB LB TB EOS
    EOS

    鍊煎緱娉ㄦ剰鐨勬槸錛?ni"鐨勫間笉鑳借瑙i噴鎴怶ORD鍨嬪?xfa93錛岃屽簲璇ョ湅浣滀袱涓?3鍜宖a浠ヨ繖縐嶉『搴忚浣滀負"ni"鐨勭紪鐮併?br>
    浣跨敤瀛楃涓插鐞嗗嚱鏁?/strong>

    銆銆鎴戜滑閮藉凡緇忚榪嘋璇█涓殑瀛楃涓插嚱鏁幫紝strcpy(), sprintf(), atoll()絳夈傝繖浜涘瓧絎︿覆鍙簲璇ョ敤鏉ュ鐞嗗崟瀛楄妭瀛楃瀛楃涓層傛爣鍑嗗簱涔熸彁渚涗簡浠呴傜敤浜嶶nicode綾誨瀷瀛楃涓茬殑鍑芥暟錛屾瘮濡倃cscpy(), swprintf(), wtol()絳夈?br>銆銆寰蔣榪樺湪瀹冪殑CRT(C runtime library)涓鍔犱簡鎿嶄綔DBCS瀛楃涓茬殑鐗堟湰銆係tr***()鍑芥暟閮芥湁瀵瑰簲鍚嶅瓧鐨凞BCS鐗堟湰_mbs***()銆傚鏋滀綘鏂欏埌鍙兘浼氶亣鍒癉BCS瀛楃涓詫紙濡傛灉浣犵殑杞歡浼氳瀹夎鍦ㄤ嬌鐢―BCS緙栫爜鐨勫浗瀹訛紝濡備腑鍥斤紝鏃ユ湰絳夛紝浣犲氨鍙兘浼氾級錛屼綘搴旇浣跨敤_mbs***()鍑芥暟錛屽洜涓轟粬浠篃鍙互澶勭悊SBCS瀛楃涓層傦紙涓涓狣BCS瀛楃涓蹭篃鍙兘鍚湁鍗曞瓧鑺傚瓧絎︼紝榪欏氨鏄負浠涔坃mbs***()鍑芥暟涔熻兘澶勭悊SBCS瀛楃涓茬殑鍘熷洜錛?br>銆銆璁╂垜浠潵鐪嬩竴涓吀鍨嬬殑瀛楃涓叉潵闃愭槑涓轟粈涔堥渶瑕佷笉鍚岀増鏈殑瀛楃涓插鐞嗗嚱鏁般傛垜浠繕鏄嬌鐢ㄥ墠闈㈢殑Unicode瀛楃涓?L"Bob"錛?/p>
    42 00 6F 00 62 00 00 00
    B o b BOS

    銆銆鍥犱負x86CPU鏄痩ittle-endian錛屽?x0042鍦ㄥ唴瀛樹腑鐨勫瓨鍌ㄥ艦寮忔槸42 00銆備綘鑳界湅鍑哄鏋滆繖涓瓧絎︿覆琚紶緇檚trlen()鍑芥暟浼氬嚭鐜頒粈涔堥棶棰樺悧錛熷畠灝嗗厛鐪嬪埌絎竴涓瓧鑺?2錛岀劧鍚庢槸00錛岃?0鏄瓧絎︿覆緇撴潫鐨勬爣蹇楋紝浜庢槸strlen()灝嗕細榪斿洖1銆傚鏋滄妸"Bob"浼犵粰wcslen()錛屽皢浼氬緱鍑烘洿鍧忕殑緇撴灉銆倃cslen()灝嗕細鍏堢湅鍒?x6f42錛岀劧鍚庢槸0x0062錛岀劧鍚庝竴鐩磋鍒頒綘鐨勭紦鍐插尯鐨勬湯灝撅紝鐩村埌鍙戠幇00 00緇撴潫鏍囧織鎴栬呭紩璧蜂簡GPF銆?br>銆銆鍒扮洰鍓嶄負姝紝鎴戜滑宸茬粡璁ㄨ浜唖tr***()鍜寃cs***()鐨勭敤娉曞強瀹冧滑涔嬮棿鐨勫尯鍒係tr***()鍜宊mbs**()涔嬮棿鐨勬湁鍖哄埆鍖哄埆鍛紵鏄庣櫧浠栦滑涔嬮棿鐨勫尯鍒紝瀵逛簬閲囩敤姝g‘鐨勬柟娉曟潵閬嶅巻DBCS瀛楃涓叉槸寰堥噸瑕佺殑銆備笅闈紝鎴戜滑灝嗗厛浠嬬粛瀛楃涓茬殑閬嶅巻錛岀劧鍚庡洖鍒皊tr***()涓巁mbs***()涔嬮棿鐨勫尯鍒繖涓棶棰樹笂鏉ャ?br>
    姝g‘鐨勯亶鍘嗗拰绱㈠紩瀛楃涓?/strong>

    銆銆鍥犱負鎴戜滑涓ぇ澶氭暟浜洪兘鏄敤鐫SBCS瀛楃涓叉垚闀跨殑錛屾墍浠ユ垜浠湪閬嶅巻瀛楃涓叉椂錛屽父甯鎬嬌鐢ㄦ寚閽堢殑++-鍜?鎿嶄綔銆傛垜浠篃浣跨敤鏁扮粍涓嬫爣鐨勮〃紺哄艦寮忔潵鎿嶄綔瀛楃涓蹭腑鐨勫瓧絎︺傝繖涓ょ鏂瑰紡鏄敤浜嶴BCS鍜孶nicode瀛楃涓詫紝鍥犱負瀹冧滑涓殑瀛楃鏈夌潃鐩稿悓鐨勫搴︼紝緙栬瘧鍣ㄨ兘姝g‘鐨勮繑鍥炴垜浠渶瑕佺殑瀛楃銆?br>銆銆鐒惰岋紝褰撶鍒癉BCS瀛楃涓叉椂錛屾垜浠繀欏繪姏寮冭繖浜涗範鎯傝繖閲屾湁浣跨敤鎸囬拡閬嶅巻DBCS瀛楃涓叉椂鐨勪袱鏉¤鍒欍傝繚鑳屼簡榪欎袱鏉¤鍒欙紝浣犵殑紼嬪簭灝變細瀛樺湪DBCS鏈夊叧鐨刡ugs銆?/p>

  9. 1錛庡湪鍓嶅悜閬嶅巻鏃訛紝涓嶈浣跨敤++鎿嶄綔錛岄櫎闈炰綘姣忔閮芥鏌ead byte錛?
  10. 2錛庢案榪滀笉瑕佷嬌鐢?鎿嶄綔榪涜鍚庡悜閬嶅巻銆?
  11. 銆銆鎴戜滑鍏堟潵闃愯堪瑙勫垯2錛屽洜涓烘壘鍒頒竴涓繚鑳屽畠鐨勭湡瀹炵殑瀹炰緥浠g爜鏄緢瀹規槗鐨勩傚亣璁句綘鏈変竴涓▼搴忓湪浣犺嚜宸辯殑鐩綍閲屼繚瀛樹簡涓涓緗枃浠訛紝浣犳妸瀹夎鐩綍淇濆瓨鍦ㄦ敞鍐岃〃涓傚湪榪愯鏃訛紝浣犱粠娉ㄥ唽琛ㄤ腑璇誨彇瀹夎鐩綍錛岀劧鍚庡悎鎴愰厤緗枃浠跺悕錛屾帴鐫璇誨彇璇ユ枃浠躲傚亣璁撅紝浣犵殑瀹夎鐩綍鏄疌:\Program Files\MyCoolApp錛岄偅涔堜綘鍚堟垚鐨勬枃浠跺悕搴旇鏄疌:\Program Files\MyCoolApp\config.bin銆傚綋浣犺繘琛屾祴璇曟椂錛屼綘鍙戠幇紼嬪簭榪愯姝e父銆?br>銆銆鐜板湪錛屾兂璞′綘鍚堟垚鏂囦歡鍚嶇殑浠g爜鍙兘鏄繖鏍風殑錛?/p>

    bool GetConfigFileName ( char* pszName, size_t nBuffSize )
                {
                char szConfigFilename[MAX_PATH];
                // Read install dir from registry... we''ll assume it succeeds.
                // Add on a backslash if it wasn''t present in the registry value.
                // First, get a pointer to the terminating zero.
                char* pLastChar = strchr ( szConfigFilename, ''\0'' );
                // Now move it back one character.
                pLastChar--;
                if ( *pLastChar != ''\\'' )
                strcat ( szConfigFilename, "\\" );
                // Add on the name of the config file.
                strcat ( szConfigFilename, "config.bin" );
                // If the caller''s buffer is big enough, return the filename.
                if ( strlen ( szConfigFilename ) >= nBuffSize )
                return false;
                else
                {
                strcpy ( pszName, szConfigFilename );
                return true;
                }
                }      
    銆銆榪欐槸涓孌靛緢鍋ュ.鐨勪唬鐮侊紝鐒惰屽湪閬囧埌 DBCS 瀛楃鏃跺畠灝嗕細鍑洪敊銆傝鎴戜滑鏉ョ湅鐪嬩負浠涔堛傚亣璁句竴涓棩鏈敤鎴蜂嬌鐢ㄤ簡浣犵殑紼嬪簭錛屾妸瀹冨畨瑁呭湪 C:\銆備笅闈㈡槸榪欎釜鍚嶅瓧鍦ㄥ唴瀛樹腑鐨勫瓨鍌ㄥ艦寮忥細
    43 3A 5C 83 88 83 45 83 52 83 5C 00
    LB TB LB TB LB TB LB TB
    C : \ EOS

    銆銆褰撲嬌鐢?GetConfigFileName() 媯鏌ュ熬閮ㄧ殑''\\''鏃訛紝瀹冨鎵懼畨瑁呯洰褰曞悕涓渶鍚庣殑闈?瀛楄妭錛岀湅瀹冩槸絳変簬''\\''鐨勶紝鎵浠ユ病鏈夐噸鏂板鍔犱竴涓?'\\''銆傜粨鏋滄槸浠g爜榪斿洖浜嗛敊璇殑鏂囦歡鍚嶃?br>銆銆鍝噷鍑洪敊浜嗗憿錛熺湅鐪嬩笂闈袱涓鐢ㄨ摑鑹查珮閲忔樉紺虹殑瀛楄妭銆傛枩鏉?'\\''鐨勫兼槸0x5c銆?' ''鐨勫兼槸83 5c銆備笂闈㈢殑浠g爜閿欒鐨勮鍙栦簡涓涓?trail byte錛屾妸瀹冨綋浣滀簡涓涓瓧絎︺?br>銆銆姝g‘鐨勫悗鍚戦亶鍘嗘柟娉曟槸浣跨敤鑳藉璇嗗埆DBCS瀛楃鐨勫嚱鏁幫紝浣挎寚閽堢Щ鍔ㄦ紜殑瀛楄妭鏁般備笅闈㈡槸姝g‘鐨勪唬鐮併傦紙鎸囬拡縐誨姩鐨勫湴鏂圭敤綰㈣壊鏍囨槑錛?

    bool FixedGetConfigFileName ( char* pszName, size_t nBuffSize )
                {
                char szConfigFilename[MAX_PATH];
                // Read install dir from registry... we''ll assume it succeeds.
                // Add on a backslash if it wasn''t present in the registry value.
                // First, get a pointer to the terminating zero.
                char* pLastChar = _mbschr ( szConfigFilename, ''\0'' );
                // Now move it back one double-byte character.
                  pLastChar = CharPrev ( szConfigFilename, pLastChar );
                if ( *pLastChar != ''\\'' )
                _mbscat ( szConfigFilename, "\\" );
                // Add on the name of the config file.
                _mbscat ( szConfigFilename, "config.bin" );
                // If the caller''s buffer is big enough, return the filename.
                if ( _mbslen ( szInstallDir ) >= nBuffSize )
                return false;
                else
                {
                _mbscpy ( pszName, szConfigFilename );
                return true;
                }
                }
                
    銆銆涓婇潰鐨勫嚱鏁頒嬌鐢–harPrev() API浣縫LastChar鍚戝悗縐誨姩涓涓瓧絎︼紝榪欎釜瀛楃鍙兘鏄袱涓瓧鑺傞暱銆傚湪榪欎釜鐗堟湰閲岋紝if鏉′歡姝e父宸ヤ綔錛屽洜涓簂ead byte姘歌繙涓嶄細絳変簬0x5c銆?br>銆銆璁╂垜浠潵鎯寵薄涓涓繚鑳岃鍒?鐨勫満鍚堛備緥濡傦紝浣犲彲鑳借媯嫻嬩竴涓敤鎴瘋緭鍏ョ殑鏂囦歡鍚嶆槸鍚﹀嬈″嚭鐜頒簡'':''銆傚鏋滐紝浣犱嬌鐢?+鎿嶄綔鏉ラ亶鍘嗗瓧絎︿覆錛岃屼笉鏄嬌鐢–harNext()錛屼綘鍙兘浼氬彂鍑轟笉姝g‘鐨勯敊璇鍛婂鏋滄伆宸ф湁涓涓猼rail byte瀹冪殑鍊肩殑絳変簬'':''鐨勫箋?br>涓庤鍒?鐩稿叧鐨勫叧浜庡瓧絎︿覆绱㈠紩鐨勮鍒欙細
    2a. 姘歌繙涓嶈浣跨敤鍑忔硶鍘誨緱鍒頒竴涓瓧絎︿覆鐨勭儲寮曘?/pre>
                

    榪濊儗榪欐潯瑙勫垯鐨勪唬鐮佸拰榪濊儗瑙勫垯2鐨勪唬鐮佸緢鐩鎬技銆備緥濡傦紝

    char* pLastChar = &szConfigFilename [strlen(szConfigFilename) - 1];

    榪欏拰鍚戝悗縐誨姩涓涓寚閽堟槸鍚屾牱鐨勬晥鏋溿?br>
    鍥炲埌鍏充簬str***()鍜宊mbs***()鐨勫尯鍒?/strong>

    銆銆鐜板湪錛屾垜浠簲璇ュ緢娓呮涓轟粈涔坃mbs***()鍑芥暟鏄繀闇鐨勩係tr***()鍑芥暟鏍規湰涓嶈冭檻DBCS瀛楃錛岃宊mbs***()鑰冭檻銆傚鏋滐紝浣犺皟鐢╯trrchr("C:\\ ", ''\\'')錛岃繑鍥炵粨鏋滃彲鑳芥槸閿欒鐨勶紝鐒惰宊mbsrchr()灝嗕細璁ゅ嚭鏈鍚庣殑鍙屽瓧鑺傚瓧絎︼紝榪斿洖涓涓寚鍚戠湡鐨?'\\''鐨勬寚閽堛?br>銆銆鍏充簬瀛楃涓插嚱鏁扮殑鏈鍚庝竴鐐癸細str***()鍜宊mbs***()鍑芥暟璁や負瀛楃涓茬殑闀垮害閮芥槸浠har鏉ヨ綆楃殑銆傛墍浠ワ紝濡傛灉涓涓瓧絎︿覆鍖呭惈3涓弻瀛楄妭瀛楃錛宊mbslen()灝嗕細榪斿洖6銆俇nicode鍑芥暟榪斿洖鐨勯暱搴︽槸鎸墂char_t鏉ヨ綆楃殑銆備緥濡傦紝wcslen(L"Bob")榪斿洖3銆?br>
    Win32 API涓殑MBCS鍜孶nicode

    涓ょ粍 APIs錛?
    銆銆灝界浣犱篃璁鎬粠鏉ユ病鏈夋敞鎰忚繃錛學in32涓殑姣忎釜涓庡瓧絎︿覆鐩稿叧鐨凙PI鍜宮essage閮芥湁涓や釜鐗堟湰銆備竴涓増鏈帴鍙桵BCS瀛楃涓詫紝鍙︿竴涓帴鍙桿nicode瀛楃涓層備緥濡傦紝鏍規湰娌℃湁SetWindowText()榪欎釜API錛岀浉鍙嶏紝鏈塖etWindowTextA()鍜孲etWindowTextW()銆傚悗緙A琛ㄦ槑榪欐槸MBCS鍑芥暟錛屽悗緙W琛ㄧず榪欐槸Unicode鐗堟湰鐨勫嚱鏁般?br>銆銆褰撲綘 build 涓涓?Windows 紼嬪簭錛屼綘鍙互閫夋嫨鏄敤 MBCS 鎴栬?Unicode APIs銆傚鏋滐紝浣犳浘緇忕敤榪嘨C鍚戝騫朵笖娌℃湁鏀硅繃棰勫鐞嗙殑璁劇疆錛岄偅琛ㄦ槑浣犵敤鐨勬槸MBCS鐗堟湰銆傞偅涔堬紝鏃㈢劧娌℃湁 SetWindowText() API錛屾垜浠負浠涔堝彲浠ヤ嬌鐢ㄥ畠鍛紵winuser.h澶存枃浠跺寘鍚簡涓浜涘畯錛屼緥濡傦細

    BOOL WINAPI SetWindowTextA ( HWND hWnd, LPCSTR lpString );
                BOOL WINAPI SetWindowTextW ( HWND hWnd, LPCWSTR lpString );
                #ifdef UNICODE
                #define SetWindowText  SetWindowTextW
                #else
                #define SetWindowText  SetWindowTextA
                #endif      
    褰撲嬌鐢∕BCS APIs鏉uild紼嬪簭鏃訛紝UNICODE娌℃湁琚畾涔夛紝鎵浠ラ澶勭悊鍣ㄧ湅鍒幫細
    #define SetWindowText SetWindowTextA

    銆銆榪欎釜瀹忓畾涔夋妸鎵鏈夊SetWindowText鐨勮皟鐢ㄩ兘杞崲鎴愮湡姝g殑API鍑芥暟SetWindowTextA銆傦紙褰撶劧錛屼綘鍙互鐩存帴璋冪敤SetWindowTextA() 鎴栬?SetWindowTextW()錛岃櫧鐒朵綘涓嶅繀閭d箞鍋氥傦級
    銆銆鎵浠ワ紝濡傛灉浣犳兂鎶婇粯璁や嬌鐢ㄧ殑API鍑芥暟鍙樻垚Unicode鐗堢殑錛屼綘鍙互鍦ㄩ澶勭悊鍣ㄨ緗腑錛屾妸_MBCS浠庨瀹氫箟鐨勫畯鍒楄〃涓垹闄わ紝鐒跺悗娣誨姞UNICODE鍜宊UNICODE銆?浣犻渶瑕佷袱涓兘瀹氫箟錛屽洜涓轟笉鍚岀殑澶存枃浠跺彲鑳戒嬌鐢ㄤ笉鍚岀殑瀹忋? 鐒惰岋紝濡傛灉浣犵敤char鏉ュ畾涔変綘鐨勫瓧絎︿覆錛屼綘灝嗕細闄峰叆涓涓按灝殑澧冨湴銆傝冭檻涓嬮潰鐨勪唬鐮侊細

    HWND hwnd = GetSomeWindowHandle();
                char szNewText[] = "we love Bob!";
                SetWindowText ( hwnd, szNewText );

    鍦ㄩ澶勭悊鍣ㄦ妸SetWindowText鐢⊿etWindowTextW鏉ユ浛鎹㈠悗錛屼唬鐮佸彉鎴愶細

    HWND hwnd = GetSomeWindowHandle();
                char szNewText[] = "we love Bob!";
                SetWindowTextW ( hwnd, szNewText );

    銆銆鐪嬪埌闂浜嗗悧錛熸垜浠妸鍗曞瓧鑺傚瓧絎︿覆浼犵粰浜嗕竴涓互Unicode瀛楃涓插仛鍙傛暟鐨勫嚱鏁般傝В鍐寵繖涓棶棰樼殑絎竴涓柟妗堟槸浣跨敤 #ifdef 鏉ュ寘鍚瓧絎︿覆鍙橀噺鐨勫畾涔夛細

    HWND hwnd = GetSomeWindowHandle();
                #ifdef UNICODE
                wchar_t szNewText[] = L"we love Bob!";
                #else
                char szNewText[] = "we love Bob!";
                #endif
                SetWindowText ( hwnd, szNewText );

    浣犲彲鑳藉凡緇忔劅鍙楀埌浜嗚繖鏍峰仛灝嗕細浣夸綘澶氫箞鐨勫ご鐤箋傚畬緹庣殑瑙e喅鏂規鏄嬌鐢═CHAR.

    浣跨敤TCHAR

    銆銆TCHAR鏄竴縐嶅瓧絎︿覆綾誨瀷錛屽畠璁╀綘鍦ㄤ互MBCS鍜孶NNICODE鏉uild紼嬪簭鏃跺彲浠ヤ嬌鐢ㄥ悓鏍風殑浠g爜錛屼笉闇瑕佷嬌鐢ㄧ箒鐞愮殑瀹忓畾涔夋潵鍖呭惈浣犵殑浠g爜銆俆CHAR鐨勫畾涔夊涓嬶細

    #ifdef UNICODE
                typedef wchar_t TCHAR;
                #else
                typedef char TCHAR;
                #endif

    鎵浠ョ敤MBCS鏉uild鏃訛紝TCHAR鏄痗har錛屼嬌鐢║NICODE鏃訛紝TCHAR鏄痺char_t銆傝繕鏈変竴涓畯鏉ュ鐞嗗畾涔塙nicode瀛楃涓插父閲忔椂鎵闇鐨凩鍓嶇紑銆?/p>

    #ifdef UNICODE
                #define _T(x) L##x
                #else
                #define _T(x) x
                #endif

    銆銆##鏄竴涓澶勭悊鎿嶄綔絎︼紝瀹冨彲浠ユ妸涓や釜鍙傛暟榪炲湪涓璧楓傚鏋滀綘鐨勪唬鐮佷腑闇瑕佸瓧絎︿覆甯擱噺錛屽湪瀹冨墠闈㈠姞涓奯T瀹忋傚鏋滀綘浣跨敤Unicode鏉uild錛屽畠浼氬湪瀛楃涓插父閲忓墠鍔犱笂L鍓嶇紑銆?/p>

    TCHAR szNewText[] = _T("we love Bob!");

    銆銆鍍忔槸鐢ㄥ畯鏉ラ殣钘廠etWindowTextA/W鐨勭粏鑺備竴鏍鳳紝榪樻湁寰堝鍙互渚涗綘浣跨敤鐨勫畯鏉ュ疄鐜皊tr***()鍜宊mbs***()絳夊瓧絎︿覆鍑芥暟銆備緥濡傦紝浣犲彲浠ヤ嬌鐢╛tcsrchr瀹忔潵鏇挎崲strrchr()銆乢mbsrchr()鍜寃csrchr()銆俖tcsrchr鏍規嵁浣犻瀹氫箟鐨勫畯鏄痏MBCS榪樻槸UNICODE鏉ユ墿灞曟垚姝g‘鐨勫嚱鏁幫紝灝卞儚SetWindowText鎵浣滅殑涓鏍楓?br>銆銆涓嶄粎str***()鍑芥暟鏈塗CHAR瀹忋傚叾浠栫殑鍑芥暟濡傦紝 _stprintf錛堜唬鏇縮prinft()鍜宻wprintf()錛?_tfopen錛堜唬鏇縡open()鍜宊wfopen()錛夈?MSDN涓?Generic-Text Routine Mappings."鏍囬涓嬫湁瀹屾暣鐨勫畯鍒楄〃銆?br>
    瀛楃涓插拰TCHAR typedefs

    銆銆鐢變簬Win32 API鏂囨。鐨勫嚱鏁板垪琛ㄤ嬌鐢ㄥ嚱鏁扮殑甯哥敤鍚嶅瓧錛堜緥濡傦紝"SetWindowText"錛夛紝鎵鏈夌殑瀛楃涓查兘鏄敤TCHAR鏉ュ畾涔夌殑銆傦紙闄や簡XP涓紩鍏ョ殑鍙傜敤浜嶶nicode鐨凙PI錛夈備笅闈㈠垪鍑轟竴浜涘父鐢ㄧ殑typedefs錛屼綘鍙互鍦╩sdn涓湅鍒頒粬浠?/p>
    type Meaning in MBCS builds Meaning in Unicode builds
    WCHAR wchar_t wchar_t
    LPSTR zero-terminated string of char (char*) zero-terminated string of char (char*)
    LPCSTR constant zero-terminated string of char (const char*) constant zero-terminated string of char (const char*)
    LPWSTR zero-terminated Unicode string (wchar_t*) zero-terminated Unicode string (wchar_t*)
    LPCWSTR constant zero-terminated Unicode string (const wchar_t*) constant zero-terminated Unicode string (const wchar_t*)
    TCHAR char wchar_t
    LPTSTR zero-terminated string of TCHAR (TCHAR*) zero-terminated string of TCHAR (TCHAR*)
    LPCTSTR constant zero-terminated string of TCHAR (const TCHAR*) constant zero-terminated string of TCHAR (const TCHAR*)

    浣曟椂浣跨敤 TCHAR 鍜?Unicode

    銆銆鍒扮幇鍦紝浣犲彲鑳戒細闂紝鎴戜滑涓轟粈涔堣浣跨敤Unicode銆傛垜宸茬粡鐢ㄤ簡寰堝騫寸殑char銆備笅鍒?縐嶆儏鍐典笅錛屼嬌鐢║nicode灝嗕細浣夸綘鍙楃泭錛?/p>

  12. 1錛庝綘鐨勭▼搴忓彧榪愯鍦╓indows NT緋葷粺涓?
  13. 2錛?浣犵殑紼嬪簭闇瑕佸鐞嗚秴榪嘙AX_PATH涓瓧絎﹂暱鐨勬枃浠跺悕銆?
  14. 3錛?浣犵殑紼嬪簭闇瑕佷嬌鐢╔P涓紩鍏ョ殑鍙湁Unicode鐗堟湰鐨凙PI.
  15. 銆銆Windows 9x 涓ぇ澶氭暟鐨?API 娌℃湁瀹炵幇 Unicode 鐗堟湰銆傛墍浠ワ紝濡傛灉浣犵殑紼嬪簭瑕佸湪windows 9x涓繍琛岋紝浣犲繀欏諱嬌鐢∕BCS APIs銆傜劧鑰岋紝鐢變簬NT緋葷粺鍐呴儴閮戒嬌鐢║nicode錛屾墍浠ヤ嬌鐢║nicode APIs灝嗕細鍔犲揩浣犵殑紼嬪簭鐨勮繍琛岄熷害銆傛瘡嬈★紝浣犱紶閫掍竴涓瓧絎︿覆璋冪敤MBCS API錛屾搷浣滅郴緇熶細鎶婅繖涓瓧絎︿覆杞崲鎴怳nicode瀛楃涓詫紝鐒跺悗璋冪敤瀵瑰簲鐨刄nicode API銆傚鏋滀竴涓瓧絎︿覆琚繑鍥烇紝鎿嶄綔緋葷粺榪樿鎶婂畠杞彉鍥炲幓銆傚敖綆¤繖涓漿鎹㈣繃紼嬭楂樺害浼樺寲浜嗭紝浣嗗畠瀵歸熷害閫犳垚鐨勬崯澶辨槸鏃犳硶閬垮厤鐨勩?br>銆銆鍙浣犱嬌鐢║nicode API錛孨T緋葷粺鍏佽浣跨敤闈炲父闀跨殑鏂囦歡鍚嶏紙紿佺牬浜哅AX_PATH鐨勯檺鍒訛紝MAX_PATH=260錛夈備嬌鐢║nicode API鐨勫彟涓涓紭鐐規槸浣犵殑紼嬪簭浼氳嚜鍔ㄥ鐞嗙敤鎴瘋緭鍏ョ殑鍚勭璇█銆傛墍浠ヤ竴涓敤鎴峰彲浠ヨ緭鍏ヨ嫳鏂囷紝涓枃鎴栬呮棩鏂囷紝鑰屼綘涓嶉渶瑕侀澶栫紪鍐欎唬鐮佸幓澶勭悊瀹冧滑銆?br>銆銆鏈鍚庯紝闅忕潃windows 9x浜у搧鐨勬貳鍑猴紝寰蔣浼間箮姝e湪鎶涘純MBCS APIs銆備緥濡傦紝鍖呭惈涓や釜瀛楃涓插弬鏁扮殑SetWindowTheme() API鍙湁Unicode鐗堟湰鐨勩備嬌鐢║nicode鏉uild浣犵殑紼嬪簭灝嗕細綆鍖栧瓧絎︿覆鐨勫鐞嗭紝浣犱笉蹇呭湪MBCS鍜孶nicdoe涔嬮棿鐩鎬簰杞崲銆?br>銆銆鍗充嬌浣犵幇鍦ㄤ笉浣跨敤Unicode鏉uild浣犵殑紼嬪簭錛屼綘涔熷簲璇ヤ嬌鐢═CHAR鍙婂叾鐩稿叧鐨勫畯銆傝繖鏍峰仛涓嶄粎鍙互鐨勪唬鐮佸彲浠ュ緢濂藉湴澶勭悊DBCS錛岃屼笖濡傛灉灝嗘潵浣犳兂鐢║nicode鏉uild浣犵殑紼嬪簭錛屼綘鍙渶瑕佹敼鍙樹竴涓嬮澶勭悊鍣ㄤ腑鐨勮緗氨鍙互瀹炵幇浜嗐?br>

     

     

     

    浣滆呯畝浠?/strong>
    銆銆Michael Dunn錛氬眳浣忓湪闃沖厜鍩庡競媧涙潐鐭躲備粬鏄姝ょ殑鍠滄榪欓噷鐨勫ぉ姘斾互鑷翠簬鎯充竴鐢熼兘浣忓湪榪欓噷銆備粬鍦?騫寸駭鏃跺紑濮嬬紪紼嬶紝閭f椂鐢ㄧ殑鐢佃剳鏄疉pple //e銆?995騫達紝鍦?UCLA 鑾峰緱鏁板瀛﹀+瀛︿綅錛岄殢鍚庡湪Symantec 鍏徃鍋?QA 宸ョ▼甯堬紝鍦?Norton AntiVirus 緇勫伐浣溿備粬鑷浜?Windows 鍜?MFC 緙栫▼銆?999-2000騫達紝浠栬璁″茍瀹炵幇浜?Norton AntiVirus 鐨勬柊鐣岄潰銆傘
    銆銆Michael 鐜板湪鍦?Napster錛堜竴涓彁渚涘湪綰胯闃呴煶涔愭湇鍔$殑鍏徃錛夊仛寮鍙戝伐浣滐紝浠栬繕寮鍙戜簡UltraBar錛屼竴涓狪E宸ュ叿鏍忔彃浠訛紝瀹冨彲浠ヤ嬌緗戠粶鎼滅儲鏇村姞瀹規槗錛岀粰浜?googlebar 浠ユ矇閲嶆墦鍑伙紱浠栬繕寮鍙戜簡 CodeProject SearchBar錛涗笌浜哄叡鍚屽垱寤轟簡 Zabersoft 鍏徃錛岃鍏徃鍦ㄦ礇鏉夌煻鍜屼腹楹︾殑 Odense 閮借鏈夊姙浜嬪銆?br>銆銆浠栧枩嬈㈢帺娓告垙銆傜埍鐜╃殑娓告垙鏈?pinball, bike riding錛屽伓灝旇繕鐜?PS, Dreamcasth 鍜?MAME 娓告垙銆備粬鍥犲繕浜嗚嚜宸辨浘緇忓榪囩殑璇█錛氭硶璇佹眽璇佹棩璇屾劅鍒版偛鍝銆?/td>

    ]]>Windows Mobile涓浣曞緩绔婫PRS榪炴帴浠ヤ究Socket鑳芥甯擱氫俊http://m.shnenglu.com/gtwdaizi/articles/39578.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Tue, 25 Dec 2007 06:51:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/39578.htmlhttp://m.shnenglu.com/gtwdaizi/comments/39578.htmlhttp://m.shnenglu.com/gtwdaizi/articles/39578.html#Feedback0http://m.shnenglu.com/gtwdaizi/comments/commentRss/39578.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/39578.html 

    銆愮増   鏈?/span>

    1.0.0

    銆愭搷浣滅郴緇熴?/span>

    Windows Mobile 5.0

    銆愪綔   鑰呫?/span>

    璋㈢孩浼?#183;chrys ·chrys@163.com ·http://www.howa.com.cn

    銆愬紑鍙戞棩鏈熴?/span>

    2007-12-11 01:23:56

     

    鏈榪戠紪鍐欎竴涓尰鐤楅」鐩殑紼嬪簭錛岄渶瑕佺敤 Windows Mobile 鏉ュ仛閫氫俊澶勭悊錛岄渶瑕佸皢鎵嬫満绔殑鏁版嵁閫氳繃GPRS浼犻佽嚦鍏綉涓婄殑涓涓湇鍔″櫒涓娿傛暟鎹紶杈撴垜閲囩敤鐨勬槸socket錛岀敤鏁版嵁綰?/span>+ActiveSync璋冭瘯閫氳繃錛屾暟鎹紶杈撴甯革紝鍦ㄥ噯澶囧皢杞歡鎻愪氦緇欒川媯閮ㄩ棬鐨勬椂鍊欙紝鐢ㄧ湡姝g殑GPRS鏉ュ仛閫氫俊嫻嬭瘯鏃訛紝闂鍑烘潵浜嗭紝榪炴帴濮嬬粓寤虹珛涓嶄簡錛屼絾鐢ㄦ墜鏈虹殑IE嫻忚鍣ㄥ嵈鑳芥甯告墦寮緗戦〉錛岃屼笖濂囨殑鏄彧瑕佺敤IE嫻忚鍣ㄦ垚鍔熻闂繃涓嬈$綉欏碉紝鎴戠殑 socket 灝辮兘姝e父榪涜鏁版嵁閫氫俊錛岀湅鏉ヤ紶璇翠腑鐨?/span>GPRS甯歌繛鎺ヨ鎴戣瑙d簡銆?/span>

    鎵嬫満寮閫?/span>GPRS浠ュ悗錛屾垜浠殑socket 紼嬪簭榪樹笉鑳界洿鎺ュ緩绔嬬綉緇滆繛鎺ワ紝闇瑕佺敤榪炴帴綆$悊鍣ㄦ潵鑾峰彇褰撳墠鍙敤榪炴帴錛屽茍鑷姩閫夋嫨涓涓渶浣崇殑榪炴帴閫斿緞錛岀劧鍚庡惎鐢ㄨ繖涓繛鎺ワ紝鍦ㄨ繛鎺ュ惎鍔ㄦ垚鍔熶互鍚庡啀鐢?/span>socket 榪涜緗戠粶榪炴帴鏂瑰彲姝e父榪涜銆傚ぇ姒?/span>GPRS鎷ㄥ彿鍜岃繛鎺ヨ繃紼嬪氨鏄湪榪欓噷鑷姩榪涜鐨勫惂銆傛簮浠g爜涓皝瑁呬簡涓涓繛鎺ョ鐞嗙殑綾誨拰嫻嬭瘯浠g爜錛屽彲浠ユ竻妤氬湴鐪嬪埌Windows Mobile 鍦?/span>socket 緙栫▼涔嬪墠鍒板簳闇瑕佸仛浠涔堟牱鐨勬搷浣溿?/span>

     

    棣栧厛闇瑕佹灇涓懼綋鍓嶅彲鐢ㄧ殑榪炴帴

    void CConnectManager::EnumNetIdentifier ( OUT CStringArray &StrAry )

    {

           CONNMGR_DESTINATION_INFO networkDestInfo = {0};

     

           // 寰楀埌緗戠粶鍒楄〃

           for ( DWORD dwEnumIndex=0; ; dwEnumIndex++ )

           {

                  memset ( &networkDestInfo, 0, sizeof(CONNMGR_DESTINATION_INFO) );

                  if ( ConnMgrEnumDestinations ( dwEnumIndex, &networkDestInfo ) == E_FAIL )

                  {

                         break;

                  }

                  StrAry.Add ( networkDestInfo.szDescription );

           }

    }

     

    鎺ヤ笅鏉ユ壘鍒?#8220;Internet”榪欎釜榪炴帴錛屽彲鐢ㄨ繙紼?/span>URL鏄犲皠鐨勬柟寮忔潵瀹屾垚錛岃繖鏍峰彲浠ヨ緋葷粺鑷姩閫夊彇涓涓渶濂界殑榪炴帴銆?/span>

    int CConnectManager::MapURLAndGUID ( LPCTSTR lpszURL, OUT GUID &guidNetworkObject, OUT CString *pcsDesc/*=NULL*/ )

    {

           if ( !lpszURL || lstrlen(lpszURL) < 1 )

                  return FALSE;

     

           memset ( &guidNetworkObject, 0, sizeof(GUID) );

           int nIndex = 0;

           HRESULT hResult = ConnMgrMapURL ( lpszURL, &guidNetworkObject, (DWORD*)&nIndex );

           if ( FAILED(hResult) )

           {

                  nIndex = -1;

                  DWORD dwLastError = GetLastError ();

                  AfxMessageBox ( _T("Could not map a request to a network identifier") );

           }

           else

           {

                  if ( pcsDesc )

                  {

                         CONNMGR_DESTINATION_INFO DestInfo = {0};

                         if ( SUCCEEDED(ConnMgrEnumDestinations(nIndex, &DestInfo)) )

                         {

                                *pcsDesc = DestInfo.szDescription;

                         }

                  }

           }

     

           return nIndex;

    }

     

    浠ヤ笅浠g爜鏄敤鏉ュ惎鐢ㄦ寚瀹氱紪鍙風殑榪炴帴

    BOOL CConnectManager::EstablishConnection ( DWORD dwIndex )

    {

           ReleaseConnection ();

     

           // 寰楀埌姝g‘鐨勮繛鎺ヤ俊鎭?/span>

           CONNMGR_DESTINATION_INFO DestInfo = {0};

           HRESULT hResult = ConnMgrEnumDestinations(dwIndex, &DestInfo);

           BOOL bRet = FALSE;

           if(SUCCEEDED(hResult))

           {

                  // 鍒濆鍖栬繛鎺ョ粨鏋?/span>

                  CONNMGR_CONNECTIONINFO ConnInfo;

     

                  ZeroMemory(&ConnInfo, sizeof(ConnInfo));

                  ConnInfo.cbSize = sizeof(ConnInfo);

                  ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;

                  ConnInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;

                  ConnInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;

                  ConnInfo.guidDestNet = DestInfo.guid;

                  ConnInfo.bExclusive     = FALSE;

                  ConnInfo.bDisabled = FALSE;

     

                  DWORD dwStatus = 0;

                  hResult = ConnMgrEstablishConnectionSync(&ConnInfo, &m_hConnection, 10*1000, &dwStatus );

                  if(FAILED(hResult))

                  {

                         m_hConnection = NULL;

                  }

                  else bRet = TRUE;

           }

     

           return bRet;

    }

     

    涓轟簡紜繚榪炴帴鏄惁鐪熸鍙敤錛岄渶瑕佹嫻嬭繛鎺ョ姸鎬侊紝鍦ㄨ瀹氱殑鏃墮棿鍐呭鏋滄湭鍙栧緱“榪炴帴鎴愬姛”鐨勭姸鎬侊紝鍒欒涓鴻繛鎺ユ湭鑳芥甯稿惎鐢紝鍙兘闇瑕侀厤緗墜鏈虹殑榪炴帴綆$悊鍣ㄧ晫闈?/font>

    BOOL CConnectManager::WaitForConnected ( int nTimeoutSec, DWORD *pdwStatus/*=NULL*/ )

    {

           DWORD dwStartTime = GetTickCount ();

           BOOL bRet = FALSE;

           while ( GetTickCount ()-dwStartTime < (DWORD)nTimeoutSec * 1000 )

           {

                  if ( m_hConnection )

                  {

                         DWORD dwStatus = 0;

                         HRESULT hr = ConnMgrConnectionStatus ( m_hConnection, &dwStatus );

                         if ( pdwStatus ) *pdwStatus = dwStatus;

                         if ( SUCCEEDED(hr) )

                         {

                                if ( dwStatus == CONNMGR_STATUS_CONNECTED )

                                {

                                       bRet = TRUE;

                                       break;

                                }

                         }

                  }

                  Sleep ( 100 );

           }

     

           return bRet;

    }

     

    鑷蟲錛屾垜浠殑榪炴帴鍚敤宸ヤ綔宸茬粡鍋氬畬浜嗭紝鎴戜滑鍙互鐢ㄦ垜浠啛鎮夌殑 socket 鏉ョ紪鍐欑綉緇滈氫俊紼嬪簭浜嗐備笅闈㈡槸涓涓祴璇?/span> socket 嫻嬭瘯緗戠粶榪炴帴鏄惁鑳芥甯稿緩绔嬬殑渚嬪瓙錛?/span>

    SetWaitCursor ();

    CSocket sock;

    sock.Create ();

    if ( sock.Connect ( _T("www.baidu.com"), 80 ) )

    {

           RestoreCursor ();

           AfxMessageBox ( _T("Connect to www.baidu.com successfully"), MB_ICONINFORMATION );

    }

    else

    {

           RestoreCursor ();

           AfxMessageBox ( _T("Connect to www.baidu.com failed") );

    }

     

    GPRSDemo.exe 鐨勪嬌鐢?/span>

    紼嬪簭鍚姩浠ュ悗鍑虹幇濡備笅鐣岄潰錛?/font>

     

    榪炴帴鍙敤鎬?/span> 媯嫻嬭繛鎺ョ鐞嗗櫒鏄惁鍙敤

    鏄犲皠URL – 鏄緋葷粺鑷姩瀵繪壘涓涓渶濂界殑榪炴帴

    鏋氫婦緗戠粶鏍囪瘑絎?/span> 灝嗗綋鍓嶇郴緇熶腑鎵鏈夊彲鐢ㄧ殑榪炴帴閮戒細琚灇涓懼嚭鏉?/span>

    榪炴帴緗戠粶 灝嗘灇涓懼嚭鏉ョ殑榪炴帴閫変腑鐨勯偅涓繛鎺ヨ繘琛岃繛鎺ュ惎鐢ㄦ搷浣溿?/span>

    榪炴帴鐘舵?/span> 琛ㄧず鍙互鑾峰彇鍒板綋鍓嶈繛鎺ョ殑鐘舵侊紱

    榪炴帴鍒板叕緗戞祴璇?/span> 鍒╃敤 www.baidu.com 鏉ユ祴璇曡繛鎺ユ槸鍚﹀凡緇忔甯稿惎鍔ㄣ?/span>

     

    鎿嶄綔姝ラ錛?/font>

    鍙互鐩存帴鎸?#8220;鏋氫婦緗戠粶鏍囪瘑絎?#8221;錛岀▼搴忓皢鎵鏈夊綋鍓嶅湪鐢ㄧ殑緗戠粶鏋氫婦鍑烘潵騫舵坊鍔犲埌 ListBox 鎺т歡涓紱

    榪炴帴緗戠粶銆傞夋嫨涓涓繛鎺ワ紙渚嬪錛?/span>Internet錛夛紝鎸?#8220;榪炴帴緗戠粶”鎸夐挳錛屽綋鎻愮ず Connection net successfully 琛ㄧず榪炴帴宸茬粡姝e父鍚敤浜嗐?/span>

    鎸?#8220;榪炴帴鍒板叕緗戞祴璇?#8221;鎸夐挳錛岃蔣浠惰嚜鍔ㄥ拰 www.baidu.com 榪涜榪炴帴嫻嬭瘯銆?/span>

     

    婧愪唬鐮佷笅杞藉湴鍧錛歨ttp://www.pudn.com/downloads94/sourcecode/embed/detail373151.html



    ]]>
    WaitForMultipleObjects鐢ㄦ硶鎺㈢儲http://m.shnenglu.com/gtwdaizi/articles/39556.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Tue, 25 Dec 2007 03:09:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/39556.htmlhttp://m.shnenglu.com/gtwdaizi/comments/39556.htmlhttp://m.shnenglu.com/gtwdaizi/articles/39556.html#Feedback0http://m.shnenglu.com/gtwdaizi/comments/commentRss/39556.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/39556.htmlWaitForMultipleObjects鏄?/span>Windows涓殑涓涓姛鑳介潪甯稿己澶х殑鍑芥暟錛屽嚑涔庡彲浠ョ瓑寰?/span>Windows涓殑鎵鏈夌殑鍐呮牳瀵硅薄錛堝叧浜庤鍑芥暟鐨勬弿榪板拰渚嬪瓙瑙?/span>MSDN錛岋級銆備絾鍚屾椂璇ュ嚱鏁板湪鐢ㄦ硶涓婂嵈闇瑕佷竴瀹氱殑鎶宸с?/span>

    鍘熷瀷錛?/span>DWORD WaitForMultipleObjects(
     DWORD nCount,
     const HANDLE* lpHandles,
     BOOL bWaitAll,
     DWORD dwMilliseconds
    );

     

    褰?/span>WaitForMultipleObjects絳夊埌澶氫釜鍐呮牳瀵硅薄鐨勬椂鍊欙紝濡傛灉瀹冪殑bWaitAll 鍙傛暟璁劇疆涓?/span>false銆傚叾榪斿洖鍊煎噺鍘?/span>WAIT_OBJECT_0 灝辨槸鍙傛暟lpHandles鏁扮粍鐨勫簭鍙楓傚鏋滃悓鏃舵湁澶氫釜鍐呮牳瀵硅薄琚嚭鍙戯紝榪欎釜鍑芥暟榪斿洖鐨勫彧鏄叾涓簭鍙鋒渶灝忕殑閭d釜銆?/font>

    闂灝卞湪榪欓噷錛屾垜浠浣曞彲浠ヨ幏鍙栨墍鏈夎鍚屾椂瑙﹀彂鐨勫唴鏍稿璞°備婦涓緥瀛愶細鎴戜滑闇瑕佸湪涓涓嚎紼嬩腑澶勭悊浠庡畬鎴愮鍙c佹暟鎹簱銆佸拰鍙瓑寰呭畾鏃跺櫒鏉ョ殑鏁版嵁銆備竴涓吀鍨嬬殑瀹炵幇鏂規硶灝辨槸錛氱敤WaitForMultipleObjects絳夊緟鎵鏈夌殑榪欎簺浜嬩歡銆傚鏋滃畬鎴愮鍙o紝鏁版嵁搴撳彂榪囨潵鐨勬暟鎹噺闈炲父澶э紝鍙瓑寰呭畾鏃跺櫒鏃墮棿涔熷彧鏈夊嚑鍗佹縐掋傞偅涔堣繖浜涗簨浠跺悓鏃惰Е鍙戠殑鍑犵巼鍙互璇撮潪甯稿ぇ錛屾垜浠笉甯屾湜涓㈠純浠諱綍涓涓瑙﹀彂鐨勪簨浠躲傞偅涔堝浣曡兘楂樻晥鍦板疄鐜拌繖涓澶勭悊鍛紵

    MSDN涓湁涓鍙ラ潪甯擱噸瑕佺殑鎻忚堪錛屽畠鍙互璇存槸WaitForMultipleObjects鐢ㄦ硶鐨勭簿楂擄細The function modifies the state of some types of synchronization objects. Modification occurs only for the object or objects whose signaled state caused the function to return. For example, the count of a semaphore object is decreased by one. When bWaitAll is FALSE, and multiple objects are in the signaled state, the function chooses one of the objects to satisfy the wait; the states of the objects not selected are unaffected.

    澶氫釜鍐呮牳瀵硅薄琚Е鍙戞椂錛?/span>WaitForMultipleObjects閫夋嫨鍏朵腑搴忓彿鏈灝忕殑榪斿洖銆傝?/span>WaitForMultipleObjects瀹冨彧浼氭敼鍙樹嬌瀹冭繑鍥炵殑閭d釜鍐呮牳瀵硅薄鐨勭姸鎬併?/span>

    榪欏効鍙堜細浜х敓涓涓棶棰橈紝濡傛灉搴忓彿鏈灝忕殑閭d釜瀵硅薄棰戠箒琚Е鍙戯紝閭d箞搴忓彿姣斿畠澶х殑鍐呮牳瀵硅薄灝嗗緱涓嶅埌琚鐞嗙殑鏈轟細銆?/font>

    涓轟簡瑙e喅榪欎竴闂錛屽彲浠ラ噰鐢ㄥ弻WaitForMultipleObjects媯嫻嬫満鍒舵潵瀹炵幇銆傝涓嬮潰鐨勪緥瀛愶細

    DWORD WINAPI ThreadProc(LPVOID lpParameter)

    {

        DWORD dwRet = 0;

        int   nIndex = 0;

        while(1)

        {

            dwRet = WaitForMultipleObjects(nCount,pHandles,false,INFINITE);

     

            switch(dwRet)

            {

            case WAIT_TIMEOUT:

                break;

            case WAIT_FAILED:

                return 1;

            default:

                {

                    nIndex = dwRet - WAIT_OBJECT_0;

     

                    ProcessHanlde(nIndex++);

                    //鍚屾椂媯嫻嬪叾浠栫殑浜嬩歡

                    while(nIndex < nCount)

                    {

                        dwRet = WaitForMultipleObjects(nCount - nIndex,&pHandles[nIndex],false,0);

     

                        switch(dwRet)

                        {

                        case WAIT_TIMEOUT:

                            nIndex = nCount; //閫鍑烘嫻?span>,鍥犱負娌℃湁琚Е鍙戠殑瀵硅薄浜?span>.

                            break;

                        case WAIT_FAILED:

                            return 1;

                        default:

                            {

                                nIndex = dwRet - WAIT_OBJECT_0;

                                ProcessHanlde(nIndex++);

                            }

                            break

                        }

                    }

                }

                break;

            }

        }

        return 0;

    }



    ]]>
    Using WinInet HTTP functions in Full Asynchronous Modehttp://m.shnenglu.com/gtwdaizi/articles/39107.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Thu, 20 Dec 2007 05:49:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/39107.htmlhttp://m.shnenglu.com/gtwdaizi/comments/39107.htmlhttp://m.shnenglu.com/gtwdaizi/articles/39107.html#Feedback0http://m.shnenglu.com/gtwdaizi/comments/commentRss/39107.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/39107.htmlIntroduction

    If you have ever dug into the MSDN for WinInet API, you noticed that it can be used asynchronously and that it is the recommended way to use it.

    If then you decide to use it, you won’t find any explanation of how to use it asynchronously. And no samples are available anywhere on Internet. After a long research and lots of testing, I finally managed to reconstruct a big part of the (voluntary?) missing documentation.

    Why asynchronous is better? Because it can handle timeouts correctly. Just what’s missing in WinInet under IE5.5.

    If you try to use TerminateThread or CloseHandle functions to handle timeouts (these methods are given in MSDN articles), you’ll fall into unrecoverable leaks of all kinds.

    This has been tested successfully with: IE4.01SP3, IE5.0, IE5.01, IE5.5SP1 under WinNT4 on mono and multiprocessor machines, under a stressed environment (15 concurrent instances running non-stop for 12 hours on multi-proc NT server machines).

    Theory

    To use WinInet functions in full asynchronous mode, you must do things in the right order:

    1. Use INTERNET_FLAG_ASYNC to open the session
    2. Set a status callback using InternetSetStatusCallback
    3. Open the connection using InternetOpenUrl
    4. If InternetOpenUrl returned NULL and GetLastError is ERROR_IO_PENDING:
      • wait for the INTERNET_STATUS_HANDLE_CREATED notification in the callback, and save the connection Handle.
      • wait for the INTERNET_STATUS_REQUEST_COMPLETE notification in the callback before going further.
    5. Extract the content-length from the header and set up an INTERNET_BUFFERS structure:
      • dwStructSize = sizeof(INTERNET_BUFFERS)
      • lpvBuffer = your allocated buffer
      • dwBufferLength = its length
    6. Use InternetReadFileEx with the IRF_ASYNC flag to read the remaining data asynchronously. Don’t use InternetReadFile since it is a synchronous function.
    7. If InternetReadFileEx returned False and GetLastError is ERROR_IO_PENDING: wait for the INTERNET_STATUS_REQUEST_COMPLETE notification in the callback before going further.

      Warning: INTERNET_BUFFERS members are modified asynchronously (only the dwBufferLength member and the content of the buffer).

    8. If the dwBufferLength member is not 0, move the lpvBuffer pointer from this amount and subtract this amount from the buffer length so dwBufferLength reflects the remaining size lpvBuffer points to, then loop to 6.
    9. Close the connection handle with InternetCloseHandle and wait for INTERNET_STATUS_HANDLE_CLOSING and the facultative INTERNET_STATUS_REQUEST_COMPLETE notification (sent only if an error occurs – like a sudden closed connection -, you must test the cases).

    At this state, you can either begin a new connection process or close the session handle. But before closing it, you should un-register the callback function.

    Detail

    After the theory, let’s look at some code for some of the points:

    1&2: Create the connection using INTERNET_FLAG_ASYNC and setup the callback func:

    m_Session = InternetOpen(AGENT_NAME, INTERNET_OPEN_TYPE_PRECONFIG,
    NULL, NULL, INTERNET_FLAG_ASYNC);
    InternetSetStatusCallback( m_Session,
    (INTERNET_STATUS_CALLBACK)InternetCallbackFunc );

    3&4: Open the connection using InternetOpenUrl and wait for INTERNET_STATUS_REQUEST_COMPLETE

    Use the lParam to send a session identifier to your callback. I always use the this pointer of my class for it. I assume you know how to handle callbacks.

    InternetOpenUrl( m_Session, uurl, NULL, 0,
    INTERNET_FLAG_RELOAD | INTERNET_FLAG_PRAGMA_NOCACHE |
    INTERNET_FLAG_NO_CACHE_WRITE, (LPARAM)this );

    The callback will receive a lots of messages then. Here are their orders along with the dwInternetStatus value:

    [openUrl] InternetStatus: 60 INTERNET_STATUS_HANDLE_CREATED
    **At this point you can save the HINTERNET handle using code like this in your callback:
    INTERNET_ASYNC_RESULT* res = (INTERNET_ASYNC_RESULT*)lpvStatusInformation;
    m_hHttpFile = (HINTERNET)(res->dwResult);
    [openUrl] InternetStatus: 10
    [openUrl] InternetStatus: 11
    [openUrl] InternetStatus: 20
    [openUrl] InternetStatus: 21
    [openUrl] InternetStatus: 30
    [openUrl] InternetStatus: 31
    [openUrl] InternetStatus: 40
    [openUrl] InternetStatus: 41
    [openUrl] InternetStatus: 100 INTERNET_STATUS_REQUEST_COMPLETE

    5: Extract the content-length and set up the INTERNET_BUFFERS structure

    Once you have the handle, try to call HttpQueryInfo with HTTP_QUERY_CONTENT_LENGTH to get the size of the data to retrieve. This function can fail if the content-length field is not in the HTTP header.

    Set up the INTERNET_BUFFERS structure.

    INTERNET_BUFFERS ib = { sizeof(INTERNET_BUFFERS) };
    ib.lpvBuffer = your allocated buffer
    ib.dwBufferLength = its length

    The dwBufferTotal is provided for your own use and is never modified by WinInet (as far as I know). I use it to store the total size of the received data.

    6&7&8 Read the remaining data in a loop

    Use InternetReadFileEx with the IRF_ASYNC flag to read the remaining data asynchronously. Don’t use InternetReadFile since it is a synchronous function. You must loop on InternetReadFileEx while the ib.dwBufferLength is not 0. Before each iteration you must adjust the lpvBuffer pointer and reset the dwBufferLength members of ib: add the received length to the pointer and set dwBufferLength to your remaining buffer size.

    //Start the pump
    BOOL bOk = InternetReadFileEx( m_hHttpFile, &ib, IRF_ASYNC, (LPARAM)this );
    if(!bOk && GetLastError()==ERROR_IO_PENDING)
    wait...
    //Pump
    while( bOk && ib.dwBufferLength!=0 )
    {
    (adjust ib values)
    bOk = InternetReadFileEx( m_hHttpFile, &ib, IRF_ASYNC, (LPARAM)this );
    if(!bOk && GetLastError()==ERROR_IO_PENDING)
    wait...
    }

    Your callback should receive these notifications (maybe more than once):

    [connect] InternetStatus: 40 (receiving response)
    [connect] InternetStatus: 41 (response received)
    [connect] InternetStatus: 50
    [connect] InternetStatus: 51
    and maybe
    [connect] InternetStatus: 100 INTERNET_STATUS_REQUEST_COMPLETE

    The last is received only if GetLastError() returned ERROR_IO_PENDING. If you stored the total data size (in bytes) in the dwBufferTotal member, use it to set the final “0” in your string buffer (if it’s a string).

    buf[ib.dwBufferTotal] = 0;

    9 Close the connection handle

    InternetCloseHandle( m_httpFile );

    The callback will receive this notification when the handle is closed:

    [connect] InternetStatus: 70 INTERNET_STATUS_HANDLE_CLOSING

    In most error cases, the connection is closed unexpectedly. If it happens you’ll receive a 70 followed by a 100 (INTERNET_STATUS_REQUEST_COMPLETE). This can happen anywhere during the process.

    10 Before closing the m_Session handle

    You must deregister the callback:

    InternetSetStatusCallback( m_Session, NULL );

    This should help those who tried to go through asynchronous mode in WinInet! Sorry, there are no attached files but you should be able to use the functions and create nice classes now. If you liked this article please add an entry in my guestbook and buy me a license of my shareware.

    Bibliography

    About the Author

    Benjamin Mayrargue



    Location: United States United States

    Other popular Internet / Network articles:



    ]]>
    C++榪斿洖寮曠敤綾誨瀷銆鎸囬拡鐨勫紩鐢?/title><link>http://m.shnenglu.com/gtwdaizi/articles/38521.html</link><dc:creator>閮ぉ鏂?/dc:creator><author>閮ぉ鏂?/author><pubDate>Fri, 14 Dec 2007 07:59:00 GMT</pubDate><guid>http://m.shnenglu.com/gtwdaizi/articles/38521.html</guid><wfw:comment>http://m.shnenglu.com/gtwdaizi/comments/38521.html</wfw:comment><comments>http://m.shnenglu.com/gtwdaizi/articles/38521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/gtwdaizi/comments/commentRss/38521.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/gtwdaizi/services/trackbacks/38521.html</trackback:ping><description><![CDATA[<p><span style="COLOR: red"><strong>C++榪斿洖寮曠敤綾誨瀷</strong></span><br>A& a(){ return *this;} 灝辯敓鎴愪簡涓涓浐瀹氬湴鍧鐨勬寚閽堬紝騫舵妸鎸囬拡甯︾粰浣?<br><br>浣咥 a() { return *this;}浼氱敓鎴愪竴涓復鏃跺璞″彉閲忥紝騫舵妸榪欎釜涓存椂鍙橀噺緇欎綘 <br>榪欐牱灝卞浜嗕竴姝ユ搷浣?<br><br>褰撹繑鍥炰竴涓彉閲忔椂錛屼細浜х敓鎷瘋礉銆傚綋榪斿洖涓涓紩鐢ㄦ椂錛屼笉浼氬彂鐢熸嫹璐濓紝浣犲彲浠ュ皢寮曠敤鐪嬩綔鏄竴涓彉閲忕殑鍒悕錛屽氨鏄叾浠栫殑鍚嶅瓧錛屽紩鐢ㄥ拰琚紩鐢ㄧ殑鍙橀噺鍏跺疄鏄竴涓笢瑗匡紝鍙槸鏈変簡涓や釜鍚嶅瓧鑰屽凡銆?<br><br>闂鐨勫叧閿槸錛屽綋浣犳兂瑕佽繑鍥炰竴涓紩鐢ㄨ屼笉鏄竴涓嫹璐濇椂錛屼綘瑕佺‘淇濊繖涓紩鐢ㄧ殑鏈夋晥鎬э紝姣斿錛?<br>int & fun() { int a; a=10; return a; } <br>榪欐牱鏄笉琛岀殑錛屽洜涓篴浼氬湪fun閫鍑烘椂琚攢姣侊紝榪欐椂榪斿洖鐨刟鐨勫紩鐢ㄦ槸鏃犳晥鐨勩?<br>榪欑鎯呭喌涓嬶紝濡傛灉fun鐨勮繑鍥炵被鍨嬩笉鏄痠nt & 鑰屾槸int灝辨病鏈夐棶棰樹簡銆?</p> <br><span style="COLOR: red"><strong>鎸囬拡鐨勫紩鐢?br></strong><font face="Courier New" color=#000000>GetNearestFontInTwips(CFont *&aFont, const TFontSpec &aFontSpec);<br><br>絎竴涓弬鏁癮Font鏄竴涓寚閽? 鍓嶉潰鍔犱笂*&琛ㄧず鎸囬拡鐨勫紩鐢? 鍏跺疄鍙互濡備笅鐪嬪緟榪欎釜鏂瑰紡(CFont*) &aFont, 榪欏氨涓鐩簡鐒朵簡.</font></span> <img src ="http://m.shnenglu.com/gtwdaizi/aggbug/38521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/gtwdaizi/" target="_blank">閮ぉ鏂?/a> 2007-12-14 15:59 <a href="http://m.shnenglu.com/gtwdaizi/articles/38521.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>CListCtrl::SortItems鏂規硶http://m.shnenglu.com/gtwdaizi/articles/32783.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Mon, 24 Sep 2007 06:48:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/32783.htmlhttp://m.shnenglu.com/gtwdaizi/comments/32783.htmlhttp://m.shnenglu.com/gtwdaizi/articles/32783.html#Feedback1http://m.shnenglu.com/gtwdaizi/comments/commentRss/32783.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/32783.html

    BOOL SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData );

    pfnCompare:鎸囧畾鐨勬槸涓涓洖璋冨嚱鏁扮殑鍏ュ彛鍦板潃,榪欎釜鍑芥暟鍦ㄥ垪琛ㄤ腑鐨勮繛緇殑鑺傜偣瑕佽繘琛屾瘮杈冪殑鏃跺欒皟鐢?姣斿璇村垪琛ㄤ腑鏈変笁涓厓绱?I1,I2,I3, 鐜板湪瑕佸榪欎釜涓変釜鍏冪礌鎺掑簭,閭d箞I1 璺?I2姣旇緝鏃朵細璋冪敤榪欎釜鍑芥暟,I2 璺?I3姣旇緝鏃朵篃浼氳皟鐢?褰撶劧,絎簩嬈$殑I2鍙兘宸茬粡璺烮1浜掓崲浜?. 璇ュ嚱鏁板繀欏誨0鏄庝負static綾誨瀷,鎴栬呬竴涓潪綾繪垚鍛樺嚱鏁?

    dwData: 鎸囧畾鐨勬槸鍒楄〃瀵硅薄.

    鍥炶皟鍑芥暟鐨勫師鍨嬪涓?
    MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    鍙傛暟lParam1鍜宭Param2 鍏跺疄鏄袱涓垪琛↖tem鐨勭儲寮曞? 鎺掑簭瀹為檯涓婂氨鏄榪欎釜鍊艱繘琛屾瘮杈?
    lParamSort鍖呭惈浜嗘寚鍚慣reeCtrl鎺т歡鐨勬寚閽?鍙己鍒惰漿鎹㈣繃鏉?

    榪欓噷闇瑕佹敞鎰忕殑闂鏄?鍦ㄨ皟鐢⊿ortItems()鏂規硶涔嬪墠,蹇呴』璋冪敤SetItemData( int nItem, DWORD dwData ) 鏂規硶鏉ヨ緗洖璋冨嚱鏁頒腑浣跨敤鍒癓PARAM lParam1, LPARAM lParam2
    MSDN涓浜嶴etItemData()鍑芥暟鐨勮В閲婂涓?
    This function sets the 32-bit application-specific value associated with the item specified by nItem. This value is the lParam member of the LVITEM structure, as described in the Platform SDK.

    鎵浠ヤ笉璋冪敤SetItemData鏂規硶,鐩存帴鍘昏皟鐢⊿ortItem鏂規硶灝變細鍑虹幇鎺掑簭鏃犳晥鐨勭粨鏋?

    //SortItems鍑芥暟鐨勫洖璋冨嚱鏁?br>int CALLBACK CConfigDlg::ListCtrlCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
        INT iRet = 0;
        if (lParam1 > lParam2)
        {
            iRet = 1;
        }
        else
        {
            iRet = -1;
        }
        return iRet;
    }

    ]]>
    VC鐨凚ug-瀹夎榪囩▼涓垱寤篋COM鍑洪敊(Setup Was Unable to Create a DCOM User Account)http://m.shnenglu.com/gtwdaizi/articles/32682.html閮ぉ鏂?/dc:creator>閮ぉ鏂?/author>Sat, 22 Sep 2007 11:49:00 GMThttp://m.shnenglu.com/gtwdaizi/articles/32682.htmlhttp://m.shnenglu.com/gtwdaizi/comments/32682.htmlhttp://m.shnenglu.com/gtwdaizi/articles/32682.html#Feedback0http://m.shnenglu.com/gtwdaizi/comments/commentRss/32682.htmlhttp://m.shnenglu.com/gtwdaizi/services/trackbacks/32682.html浠婂ぉ鍦ㄩ噸鏂板畨瑁匳C6.0浼佷笟鐗堢殑鏃跺欏嚭鐜拌繖涓棶棰? 鏌ヤ簡涓涓嬭祫鏂?鍘熸枃濡備笅:

    VC6.Setup Was Unable to Create a DCOM User
    2006-10-29 03:08
    BUG: "Setup Was Unable to Create a DCOM User Account" Error Message in Visual Studio 6.0
    SYMPTOMS
    When you run the Visual Studio 6.0 Setup program, you may receive the following error message:
    Setup was unable to create a DCOM user account in order to register <path>\valec.exe
    This first error message may be followed by a second message that indicates that Setup failed.
     
    CAUSE
    Visual Studio Analyzer, which is one of the products that is included in Visual Studio Enterprise Edition version 6.0, cannot create the local user account that it needs to run because of changes to the security policies for users in Windows 2000.
     
    RESOLUTION
    Re-install Visual Studio 6.0 Enterprise Edition without Visual Studio Analyzer:
    1. Use the Custom setup, on the Visual Studio 6.0 Enterprise - Custom page, click Enterprise Tools, and then click Change Option.
    2. On the Visual Studio 6.0 Enterprise - Enterprise Tools page, under Options, make sure the Visual Studio Analyzer check box is not selected.
    3. Click to select all the other Visual Studio components that you want to install, and then click OK.
    4. Click Continue, and then follow the instructions that appear.
    To install Visual Studio Analyzer: 1. In Control Panel, double-click Add/Remove Programs, and then click Microsoft Visual Studio 6.0 Enterprise Edition.
    2. Click Change/Remove.
    3. In Visual Studio 6.0 Enterprise Setup, click Add/Remove.
    4. On the Visual Studio 6.0 Enterprise - Maintenance page, click Enterprise Tools, and then click Change Option.
    5. On the Visual Studio 6.0 Enterprise - Enterprise Tools page, under Options, click Visual Studio Analyzer, and then click OK.
    6. On the Visual Studio 6.0 Enterprise - Maintenance page, click Continue, and then follow the instructions that appear.

    When you receive the error message that is described in the "Symptoms" section, continue with the Visual Studio Setup Wizard. Setup reports a failure.
    To create a local account, which Visual Studio Analyzer will run as: 1. On the computer that is running Visual Studio Enterprise Edition 6.0, create a local user. For information about how to create a local user, see Windows 2000 Help. 
    2. Run Distributed COM Configuration (dcomcnfg.exe).
    3. On the Applications tab, click MSVSA Local Event Concentrator Class, and then click Properties.
    4. On the Identity tab, set This User to match the user and password you created in step 1 of this procedure.


    STATUS
    Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article. 



    ]]>
    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  16. <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>
              欧美美女bb生活片| 欧美亚洲一区三区| 国产精品免费观看在线| 男男成人高潮片免费网站| 久久久噜噜噜久久久| 亚洲欧美日韩国产综合精品二区| 一区二区三区久久| 亚洲一区二区三区四区五区黄| 一区二区三区免费在线观看| 亚洲天堂成人| 久久久999| 久久综合给合| 欧美韩日一区二区三区| 亚洲三级视频在线观看| 裸体女人亚洲精品一区| 亚洲国产清纯| 亚洲女优在线| 麻豆成人在线| 欧美偷拍另类| 在线视频成人| 亚洲在线观看免费视频| 久久久久久久综合狠狠综合| 亚洲电影av在线| 亚洲午夜视频在线观看| 久久不射网站| 欧美三级视频在线播放| 国产综合在线看| 亚洲免费久久| 欧美在线播放一区| 亚洲黄色天堂| 欧美亚洲免费电影| 欧美精品三级| 国产一区自拍视频| 亚洲欧美国产va在线影院| 亚洲福利视频一区| 亚洲欧美另类在线观看| 久久嫩草精品久久久精品| 欧美日韩精品在线| 亚洲成色www8888| 久久av二区| 亚洲欧洲午夜| 久久综合九色综合久99| 国产精品资源| 亚洲免费观看在线观看| 美女精品国产| 欧美亚洲专区| 国产欧美精品久久| 亚洲午夜伦理| 亚洲人成在线播放网站岛国| 久久久精品日韩| 国产色综合网| 久久精品30| 亚洲性视频网址| 欧美日韩在线一区| 亚洲最新视频在线| 欧美激情一区二区在线 | 久久男人资源视频| 亚洲欧美色婷婷| 国产精品亚洲不卡a| 亚洲开发第一视频在线播放| 美日韩精品视频| 久久久久这里只有精品| 狠狠久久亚洲欧美专区| 久久久久久亚洲精品中文字幕 | 久久久久久久久久久成人| 一区二区三区四区国产精品| 欧美顶级少妇做爰| 日韩亚洲综合在线| 亚洲日韩欧美视频| 欧美三级电影精品| 亚洲女女女同性video| 亚洲视频一区在线| 国产精品视频网站| 久久精品免费观看| 欧美一区在线看| 黑人一区二区| 亚洲国产精品va在看黑人| 欧美va天堂| 在线视频精品| 亚洲一区欧美激情| 国产专区精品视频| 麻豆9191精品国产| 欧美日本亚洲| 香蕉久久a毛片| 欧美在线一级va免费观看| 18成人免费观看视频| 亚洲人精品午夜在线观看| 国产精品jizz在线观看美国 | 欧美激情亚洲国产| 欧美精品三区| 久久精品一区二区| 米奇777在线欧美播放| 9色精品在线| 久久本道综合色狠狠五月| 91久久午夜| 亚洲视频电影图片偷拍一区| 狠狠色综合日日| 亚洲精品一区二区三区福利| 国产午夜亚洲精品不卡| 亚洲欧洲午夜| 国产专区欧美精品| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲无人区一区| 久久精品国产免费看久久精品| 亚洲黄色影片| 亚洲欧美另类综合偷拍| 亚洲精品国精品久久99热| 一区二区三区 在线观看视| 在线观看日韩精品| 亚洲欧美三级在线| 亚洲视频在线一区| 蜜桃伊人久久| 久久福利电影| 欧美日韩在线免费| 亚洲激情在线观看视频免费| 国产亚洲精品久久飘花| 日韩视频中文| 亚洲电影视频在线| 久久成人亚洲| 久久精品国产综合| 国产精品男女猛烈高潮激情| 亚洲精品久久在线| 亚洲区一区二| 久久综合激情| 嫩草国产精品入口| 国模叶桐国产精品一区| 亚洲欧美大片| 亚洲男人的天堂在线| 欧美日韩一区国产| 日韩视频精品在线观看| 亚洲日本欧美| 欧美va天堂在线| 亚洲国产高清一区| 亚洲国产精选| 美女脱光内衣内裤视频久久网站| 久久视频精品在线| 韩国视频理论视频久久| 欧美中文字幕在线播放| 久久精品视频在线看| 国产日韩欧美黄色| 亚洲一区视频在线| 久久蜜桃资源一区二区老牛| 国产日韩欧美麻豆| 久久精品人人做人人综合| 久久国产直播| 在线观看91精品国产入口| 久久夜色精品国产亚洲aⅴ| 免费一级欧美片在线观看| 久久久久网站| 亚洲国产精品传媒在线观看 | 亚洲午夜伦理| 国产精品亚洲综合| 亚洲一区二区在| 久久九九国产| 影音先锋亚洲视频| 麻豆精品一区二区av白丝在线| 久久―日本道色综合久久| 在线成人免费观看| 欧美日韩色综合| 亚洲永久免费视频| 蜜臀久久久99精品久久久久久 | 久久亚洲欧洲| 亚洲国产日韩欧美在线动漫| 亚洲精品视频一区| 国产精品成人一区二区三区夜夜夜| 宅男精品视频| 久久久久亚洲综合| 亚洲激情成人在线| 国产精品久久久久免费a∨大胸| 午夜精品美女自拍福到在线| 另类av导航| 亚洲调教视频在线观看| 国产一区二区三区在线观看免费| 美日韩丰满少妇在线观看| 在线视频你懂得一区| 久久视频一区二区| 亚洲自拍另类| 亚洲国产精品va在看黑人| 欧美日韩二区三区| 欧美一区二区精品在线| 亚洲国产日韩欧美| 久久久www成人免费毛片麻豆 | 久久精品中文字幕一区| 91久久精品美女| 国产精品一二一区| 欧美国产视频在线观看| 亚洲一区二区三区四区在线观看| 你懂的一区二区| 久久成人人人人精品欧| 日韩亚洲欧美成人| 亚洲国产欧洲综合997久久| 国产精品午夜在线观看| 欧美成人免费va影院高清| 午夜日韩电影| 99国产精品久久久| 欧美r片在线| 久久国产色av| 午夜视频一区在线观看| 一区二区三区欧美亚洲| 亚洲级视频在线观看免费1级|