锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久超碰97中文字幕,国产一区二区精品丝袜,国产日韩欧美在线看 http://m.shnenglu.com/ivenher/category/175.htmlzh-cn Tue, 20 May 2008 03:38:19 GMT Tue, 20 May 2008 03:38:19 GMT 60 VC甯哥敤鏁版嵁綾誨瀷浣跨敤杞崲璇﹁В http://m.shnenglu.com/ivenher/articles/2205.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Wed, 28 Dec 2005 03:33:00 GMT http://m.shnenglu.com/ivenher/articles/2205.html http://m.shnenglu.com/ivenher/comments/2205.html http://m.shnenglu.com/ivenher/articles/2205.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/2205.html http://m.shnenglu.com/ivenher/services/trackbacks/2205.html
鏂囩珷鏍囬錛?B>VC甯哥敤鏁版嵁綾誨瀷浣跨敤杞崲璇﹁В 鍘?浣?鑰咃細紼嬩僵鍚?BR>鍘?鍑?澶勶細PCVC.NET 鍙?甯?鑰咃細loose_went 鍙戝竷綾誨瀷錛氳漿杞?BR>鍙戝竷鏃ユ湡錛?004-03-18 浠婃棩嫻忚錛? 鎬?嫻?瑙堬細537
鍒氭帴瑙C緙栫▼鐨勬湅鍙嬪線寰瀵硅澶氭暟鎹被鍨嬬殑杞崲鎰熷埌榪鋒儜涓嶈В錛屾湰鏂囧皢浠嬬粛涓浜涘父鐢ㄦ暟鎹被鍨嬬殑浣跨敤銆? 鎴戜滑鍏堝畾涔変竴浜涘父瑙佺被鍨嬪彉閲忓熶互璇存槑 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="濂充緺紼嬩僵鍚?; char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2; 涓銆佸叾瀹冩暟鎹被鍨嬭漿鎹負瀛楃涓? 鐭暣鍨?int) itoa(i,temp,10);///灝唅杞崲涓哄瓧絎︿覆鏀懼叆temp涓?鏈鍚庝竴涓暟瀛楄〃紺哄崄榪涘埗 itoa(i,temp,2); ///鎸変簩榪涘埗鏂瑰紡杞崲 闀挎暣鍨?long) ltoa(l,temp,10); 浜屻佷粠鍏跺畠鍖呭惈瀛楃涓茬殑鍙橀噺涓幏鍙栨寚鍚戣瀛楃涓茬殑鎸囬拡 CString鍙橀噺 str = "2008鍖椾含濂ヨ繍"; buf = (LPSTR)(LPCTSTR)str; BSTR綾誨瀷鐨刜variant_t鍙橀噺 v1 = (_bstr_t)"紼嬪簭鍛?; buf = _com_util::ConvertBSTRToString((_bstr_t)v1); 涓夈佸瓧絎︿覆杞崲涓哄叾瀹冩暟鎹被鍨? strcpy(temp,"123"); 鐭暣鍨?int) i = atoi(temp); 闀挎暣鍨?long) l = atol(temp); 嫻偣(double) d = atof(temp); 鍥涖佸叾瀹冩暟鎹被鍨嬭漿鎹㈠埌CString 浣跨敤CString鐨勬垚鍛樺嚱鏁癋ormat鏉ヨ漿鎹?渚嬪: 鏁存暟(int) str.Format("%d",i); 嫻偣鏁?float) str.Format("%f",i); 瀛楃涓叉寚閽?char *)絳夊凡緇忚CString鏋勯犲嚱鏁版敮鎸佺殑鏁版嵁綾誨瀷鍙互鐩存帴璧嬪? str = username; 浜斻丅STR銆乢bstr_t涓嶤ComBSTR CComBSTR銆乢bstr_t鏄BSTR鐨勫皝瑁?BSTR鏄寚鍚戝瓧絎︿覆鐨?2浣嶆寚閽堛? char *杞崲鍒癇STR鍙互榪欐牱: BSTR b=_com_util::ConvertStringToBSTR("鏁版嵁");///浣跨敤鍓嶉渶瑕佸姞涓婂ご鏂囦歡comutil.h 鍙嶄箣鍙互浣跨敤char *p=_com_util::ConvertBSTRToString(b); 鍏乂ARIANT 銆乢variant_t 涓?COleVariant VARIANT鐨勭粨鏋勫彲浠ュ弬鑰冨ご鏂囦歡VC98\Include\OAIDL.H涓叧浜庣粨鏋勪綋tagVARIANT鐨勫畾涔夈? 瀵逛簬VARIANT鍙橀噺鐨勮祴鍊鹼細棣栧厛緇檝t鎴愬憳璧嬪鹼紝鎸囨槑鏁版嵁綾誨瀷錛屽啀瀵硅仈鍚堢粨鏋勪腑鐩稿悓鏁版嵁綾誨瀷鐨勫彉閲忚祴鍊鹼紝涓句釜渚嬪瓙錛? VARIANT va; int a=2001; va.vt=VT_I4;///鎸囨槑鏁村瀷鏁版嵁 va.lVal=a; ///璧嬪? 瀵逛簬涓嶉┈涓婅祴鍊肩殑VARIANT錛屾渶濂藉厛鐢╒oid VariantInit(VARIANTARG FAR* pvarg);榪涜鍒濆鍖?鍏舵湰璐ㄦ槸灝唙t璁劇疆涓篤T_EMPTY,涓嬭〃鎴戜滑鍒椾婦vt涓庡父鐢ㄦ暟鎹殑瀵瑰簲鍏崇郴: unsigned char bVal; VT_UI1 short iVal; VT_I2 long lVal; VT_I4 float fltVal; VT_R4 double dblVal; VT_R8 VARIANT_BOOL boolVal; VT_BOOL SCODE scode; VT_ERROR CY cyVal; VT_CY DATE date; VT_DATE BSTR bstrVal; VT_BSTR IUnknown FAR* punkVal; VT_UNKNOWN IDispatch FAR* pdispVal; VT_DISPATCH SAFEARRAY FAR* parray; VT_ARRAY|* unsigned char FAR* pbVal; VT_BYREF|VT_UI1 short FAR* piVal; VT_BYREF|VT_I2 long FAR* plVal; VT_BYREF|VT_I4 float FAR* pfltVal; VT_BYREF|VT_R4 double FAR* pdblVal; VT_BYREF|VT_R8 VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL SCODE FAR* pscode; VT_BYREF|VT_ERROR CY FAR* pcyVal; VT_BYREF|VT_CY DATE FAR* pdate; VT_BYREF|VT_DATE BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH SAFEARRAY FAR* FAR* pparray; VT_ARRAY|* VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT void FAR* byref; VT_BYREF _variant_t鏄疺ARIANT鐨勫皝瑁呯被錛屽叾璧嬪煎彲浠ヤ嬌鐢ㄥ己鍒剁被鍨嬭漿鎹紝鍏舵瀯閫犲嚱鏁頒細鑷姩澶勭悊榪欎簺鏁版嵁綾誨瀷銆? 渚嬪錛? long l=222; ing i=100; _variant_t lVal(l); lVal = (long)i; COleVariant鐨勪嬌鐢ㄤ笌_variant_t鐨勬柟娉曞熀鏈竴鏍鳳紝璇峰弬鑰冨涓嬩緥瀛愶細 COleVariant v3 = "瀛楃涓?, v4 = (long)1999; CString str =(BSTR)v3.pbstrVal; long i = v4.lVal; 涓冦佸叾瀹? 瀵規秷鎭殑澶勭悊涓垜浠粡甯擱渶瑕佸皢WPARAM鎴朙PARAM絳?2浣嶆暟鎹?DWORD)鍒嗚В鎴愪袱涓?6浣嶆暟鎹?WORD),渚嬪錛? LPARAM lParam; WORD loValue = LOWORD(lParam);///鍙栦綆16浣? WORD hiValue = HIWORD(lParam);///鍙栭珮16浣? 瀵逛簬16浣嶇殑鏁版嵁(WORD)鎴戜滑鍙互鐢ㄥ悓鏍風殑鏂規硶鍒嗚В鎴愰珮浣庝袱涓?浣嶆暟鎹?BYTE),渚嬪: WORD wValue; BYTE loValue = LOBYTE(wValue);///鍙栦綆8浣? BYTE hiValue = HIBYTE(wValue);///鍙栭珮8浣? 鍚庤錛氭湰鏂囧寙鍖嗗啓鎴愶紝閿欒涔嬪鍦ㄦ墍闅懼厤錛屾榪庢潵淇℃寚姝c? 緗戝弸瀵硅鏂囩珷鐨勮瘎璁? 緗戝弸: catch(hw.wh.cn@163.net) 鍙戣〃浜? 2003-4-27 20:27:05 鎴戜互鍓嶅ぇ瀛︽椂瀛﹁繃C璇█錛屼絾宸ヤ綔鍚庡氨涓鐩存病鐢ㄤ簡(澶ф鏈変袱騫翠簡)錛岀幇鍦ㄦ兂浠庡ご瀛︼紝璇烽棶鎴戝彲浠ョ洿鎺ュ涔爒c++鍚楋紵濡傛灉鍙互錛岃闂垜鏈変粈涔堝湴鏂硅娉ㄦ剰鐨勫悧錛? 鎴戞兂璇鋒偍鍛婅瘔鎴戞偍鐨勯偖綆卞湴鍧鍜屾偍鐨凲Q鍙風爜錛岃繖鏍鋒垜鏈夐棶棰樺氨鍙互鍚戞偍璇鋒暀浜嗭紝濂藉悧錛? 濡傚悓鎰忥紝鍙彂鍒版垜鐨勯偖綆憋細hw.wh.cn@163.net 璋㈣阿錛? 緗戝弸: 鍖垮悕 鍙戣〃浜? 2003-4-27 20:26:29 鎴戜互鍓嶅ぇ瀛︽椂瀛﹁繃C璇█錛屼絾宸ヤ綔鍚庡氨涓鐩存病鐢ㄤ簡(澶ф鏈変袱騫翠簡)錛岀幇鍦ㄦ兂浠庡ご瀛︼紝璇烽棶鎴戝彲浠ョ洿鎺ュ涔爒c++鍚楋紵濡傛灉鍙互錛岃闂垜鏈変粈涔堝湴鏂硅娉ㄦ剰鐨勫悧錛? 鎴戞兂璇鋒偍鍛婅瘔鎴戞偍鐨勯偖綆卞湴鍧鍜屾偍鐨凲Q鍙風爜錛岃繖鏍鋒垜鏈夐棶棰樺氨鍙互鍚戞偍璇鋒暀浜嗭紝濂藉悧錛? 濡傚悓鎰忥紝鍙彂鍒版垜鐨勯偖綆憋細hw.wh.cn@163.net 璋㈣阿錛? 緗戝弸: qlong(zhanglongping@163.com) 鍙戣〃浜? 2003-4-25 19:59:09 鍒氭帴瑙C緙栫▼鐨勬湅鍙嬪線寰瀵硅澶氭暟鎹被鍨嬬殑杞崲鎰熷埌榪鋒儜涓嶈В錛屾湰鏂囧皢浠嬬粛涓浜涘父鐢ㄦ暟鎹被鍨嬬殑浣跨敤銆? 鎴戜滑鍏堝畾涔変竴浜涘父瑙佺被鍨嬪彉閲忓熶互璇存槑 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="濂充緺紼嬩僵鍚?; char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2; 涓銆佸叾瀹冩暟鎹被鍨嬭漿鎹負瀛楃涓? 鐭暣鍨?int) itoa(i,temp,10);///灝唅杞崲涓哄瓧絎︿覆鏀懼叆temp涓?鏈鍚庝竴涓暟瀛楄〃紺哄崄榪涘埗 itoa(i,temp,2); ///鎸変簩榪涘埗鏂瑰紡杞崲 闀挎暣鍨?long) ltoa(l,temp,10); 浜屻佷粠鍏跺畠鍖呭惈瀛楃涓茬殑鍙橀噺涓幏鍙栨寚鍚戣瀛楃涓茬殑鎸囬拡 CString鍙橀噺 str = "2008鍖椾含濂ヨ繍"; buf = (LPSTR)(LPCTSTR)str; BSTR綾誨瀷鐨刜variant_t鍙橀噺 v1 = (_bstr_t)"紼嬪簭鍛?; buf = _com_util::ConvertBSTRToString((_bstr_t)v1); 涓夈佸瓧絎︿覆杞崲涓哄叾瀹冩暟鎹被鍨? strcpy(temp,"123"); 鐭暣鍨?int) i = atoi(temp); 闀挎暣鍨?long) l = atol(temp); 嫻偣(double) d = atof(temp); 鍥涖佸叾瀹冩暟鎹被鍨嬭漿鎹㈠埌CString 浣跨敤CString鐨勬垚鍛樺嚱鏁癋ormat鏉ヨ漿鎹?渚嬪: 鏁存暟(int) str.Format("%d",i); 嫻偣鏁?float) str.Format("%f",i); 瀛楃涓叉寚閽?char *)絳夊凡緇忚CString鏋勯犲嚱鏁版敮鎸佺殑鏁版嵁綾誨瀷鍙互鐩存帴璧嬪? str = username; 浜斻丅STR銆乢bstr_t涓嶤ComBSTR CComBSTR銆乢bstr_t鏄BSTR鐨勫皝瑁?BSTR鏄寚鍚戝瓧絎︿覆鐨?2浣嶆寚閽堛? char *杞崲鍒癇STR鍙互榪欐牱: BSTR b=_com_util::ConvertStringToBSTR("鏁版嵁");///浣跨敤鍓嶉渶瑕佸姞涓婂ご鏂囦歡comutil.h 鍙嶄箣鍙互浣跨敤char *p=_com_util::ConvertBSTRToString(b); 鍏乂ARIANT 銆乢variant_t 涓?COleVariant VARIANT鐨勭粨鏋勫彲浠ュ弬鑰冨ご鏂囦歡VC98\Include\OAIDL.H涓叧浜庣粨鏋勪綋tagVARIANT鐨勫畾涔夈? 瀵逛簬VARIANT鍙橀噺鐨勮祴鍊鹼細棣栧厛緇檝t鎴愬憳璧嬪鹼紝鎸囨槑鏁版嵁綾誨瀷錛屽啀瀵硅仈鍚堢粨鏋勪腑鐩稿悓鏁版嵁綾誨瀷鐨勫彉閲忚祴鍊鹼紝涓句釜渚嬪瓙錛? VARIANT va; int a=2001; va.vt=VT_I4;///鎸囨槑鏁村瀷鏁版嵁 va.lVal=a; ///璧嬪? 瀵逛簬涓嶉┈涓婅祴鍊肩殑VARIANT錛屾渶濂藉厛鐢╒oid VariantInit(VARIANTARG FAR* pvarg);榪涜鍒濆鍖?鍏舵湰璐ㄦ槸灝唙t璁劇疆涓篤T_EMPTY,涓嬭〃鎴戜滑鍒椾婦vt涓庡父鐢ㄦ暟鎹殑瀵瑰簲鍏崇郴: unsigned char bVal; VT_UI1 short iVal; VT_I2 long lVal; VT_I4 float fltVal; VT_R4 double dblVal; VT_R8 VARIANT_BOOL boolVal; VT_BOOL SCODE scode; VT_ERROR CY cyVal; VT_CY DATE date; VT_DATE BSTR bstrVal; VT_BSTR IUnknown FAR* punkVal; VT_UNKNOWN IDispatch FAR* pdispVal; VT_DISPATCH SAFEARRAY FAR* parray; VT_ARRAY|* unsigned char FAR* pbVal; VT_BYREF|VT_UI1 short FAR* piVal; VT_BYREF|VT_I2 long FAR* plVal; VT_BYREF|VT_I4 float FAR* pfltVal; VT_BYREF|VT_R4 double FAR* pdblVal; VT_BYREF|VT_R8 VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL SCODE FAR* pscode; VT_BYREF|VT_ERROR CY FAR* pcyVal; VT_BYREF|VT_CY DATE FAR* pdate; VT_BYREF|VT_DATE BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH SAFEARRAY FAR* FAR* pparray; VT_ARRAY|* VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT void FAR* byref; VT_BYREF _variant_t鏄疺ARIANT鐨勫皝瑁呯被錛屽叾璧嬪煎彲浠ヤ嬌鐢ㄥ己鍒剁被鍨嬭漿鎹紝鍏舵瀯閫犲嚱鏁頒細鑷姩澶勭悊榪欎簺鏁版嵁綾誨瀷銆? 渚嬪錛? long l=222; ing i=100; _variant_t lVal(l); lVal = (long)i; COleVariant鐨勪嬌鐢ㄤ笌_variant_t鐨勬柟娉曞熀鏈竴鏍鳳紝璇峰弬鑰冨涓嬩緥瀛愶細 COleVariant v3 = "瀛楃涓?, v4 = (long)1999; CString str =(BSTR)v3.pbstrVal; long i = v4.lVal; 涓冦佸叾瀹? 瀵規秷鎭殑澶勭悊涓垜浠粡甯擱渶瑕佸皢WPARAM鎴朙PARAM絳?2浣嶆暟鎹?DWORD)鍒嗚В鎴愪袱涓?6浣嶆暟鎹?WORD),渚嬪錛? LPARAM lParam; WORD loValue = LOWORD(lParam);///鍙栦綆16浣? WORD hiValue = HIWORD(lParam);///鍙栭珮16浣? 瀵逛簬16浣嶇殑鏁版嵁(WORD)鎴戜滑鍙互鐢ㄥ悓鏍風殑鏂規硶鍒嗚В鎴愰珮浣庝袱涓?浣嶆暟鎹?BYTE),渚嬪: WORD wValue; BYTE loValue = LOBYTE(wValue);///鍙栦綆8浣? BYTE hiValue = HIBYTE(wValue);///鍙栭珮8浣?
]]> 鍏充簬CString鎬葷粨 http://m.shnenglu.com/ivenher/articles/1056.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 11 Nov 2005 03:16:00 GMT http://m.shnenglu.com/ivenher/articles/1056.html http://m.shnenglu.com/ivenher/comments/1056.html http://m.shnenglu.com/ivenher/articles/1056.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/1056.html http://m.shnenglu.com/ivenher/services/trackbacks/1056.html
鍏充簬CString鎬葷粨
鍓嶈█錛氫覆鎿嶄綔鏄紪紼嬩腑鏈甯哥敤涔熸渶鍩烘湰鐨勬搷浣滀箣涓銆?/SPAN> 鍋氫負 VC 紼嬪簭鍛橈紝鏃犺鏄彍楦熸垨楂樻墜閮芥浘鐢ㄨ繃 Cstring 銆傝屼笖濂藉儚瀹為檯緙栫▼涓緢闅劇寰楀紑瀹冿紙铏界劧瀹冧笉鏄爣鍑嗭跡 ++ 涓殑搴擄級銆傚洜涓?/SPAN>MFC 涓彁渚涚殑榪欎釜綾誨鎴戜滑鎿嶄綔瀛椾覆瀹炲湪澶柟渚夸簡錛?/SPAN>CString 涓嶄粎鎻愪緵鍚勭涓板瘜鐨勬搷浣滃嚱鏁般佹搷浣滅閲嶈澆錛屼嬌鎴戜滑浣跨敤璧蜂覆璧鋒潵鏇磋薄 basic 涓偅鏍風洿瑙傦紱鑰屼笖瀹冭繕鎻愪緵浜嗗姩鎬佸唴瀛樺垎閰嶏紝浣挎垜浠噺灝戜簡澶氬皯瀛楃涓叉暟緇勮秺鐣岀殑闅愭偅銆備絾鏄紝鎴戜滑鍦ㄤ嬌鐢ㄨ繃紼嬩腑涔熶綋浼氬埌 CString 綆鐩村お瀹規槗鍑洪敊浜嗭紝鑰屼笖鏈夌殑涓嶅彲鎹夋懜銆傛墍浠ユ湁璁稿楂樹漢绔欒繃鏉ワ紝寤鴻鎶涘純瀹冦?/SPAN>
鍦ㄦ錛屾垜涓漢璁や負錛?/SPAN>CString 灝佽寰楃‘瀹炲緢瀹岀編錛屽畠鏈夎澶氫紭鐐癸紝濡傗滃鏄撲嬌鐢?/SPAN> 錛屽姛鑳藉己錛屽姩鎬佸垎閰嶅唴瀛橈紝澶ч噺榪涜鎷瘋礉鏃跺畠寰堣兘鑺傜渷鍐呭瓨璧勬簮騫朵笖鎵ц鏁堢巼楂橈紝涓庢爣鍑嗭跡瀹屽叏鍏煎錛屽悓鏃舵敮鎸佸瀛楄妭涓庡瀛楄妭錛岀敱浜庢湁寮傚父鏈哄埗鎵浠ヤ嬌鐢ㄥ畠瀹夊叏鏂逛究鈥?/SPAN> 鍏跺疄錛屼嬌鐢ㄨ繃紼嬩腑涔嬫墍浠ュ鏄撳嚭閿欙紝閭f槸鍥犱負鎴戜滑瀵瑰畠浜嗚В寰楄繕涓嶅錛岀壒鍒槸瀹冪殑瀹炵幇鏈哄埗銆傚洜涓烘垜浠腑鐨勫ぇ澶氭暟浜猴紝鍦ㄥ伐浣滀腑騫朵笉閭d箞鐖辨繁鍏ュ湴鍘葷湅鍏充簬瀹冪殑鏂囨。錛屼綍鍐靛畠榪樻槸鑻辨枃鐨勩?/SPAN>
鐢變簬鍓嶅嚑澶╂垜鍦ㄥ伐浣滀腑閬囧埌浜嗕竴涓湰涓嶆槸闂浣嗗嵈鐗瑰埆媯樻墜銆佺壒鍒毦瑙e喅鑰屼笖鑾悕鎯婅鐨勯棶棰樸傚ソ鏉ユ渶鍚庡彂鐜版槸鐢變簬 CString 寮曞彂鐨勩傛墍浠ユ病鍔炴硶錛屾垜鎶婃暣涓?/SPAN>CString 鐨勫疄鐜板叏閮ㄧ湅浜嗕竴閬嶏紝鎵嶆厡鐒跺ぇ鎮燂紝騫跺交搴曞紕娓呬簡闂鐨勫師鍥?/SPAN>( 榪欎釜闂錛屾垜宸插湪 csdn 涓婂紑璐?/SPAN>) 銆傚湪姝わ紝鎴戞兂鎶婃垜鐨勪竴浜涘叧浜?/SPAN>CString 鐨勭煡璇嗘葷粨涓鐣紝浠ヤ緵浠栵紙濂癸級浜哄熼壌錛屼篃璁稿叾涓湁鎴戠悊瑙d笂鐨勯敊璇紝鏈涘彂鐜拌呰兘閫氱煡鎴戯紝涓嶈儨鎰熻阿銆?/SPAN>
1 錛?/SPAN> CString 瀹炵幇鐨勬満鍒?/SPAN>.
CString鏄氳繃鈥滃紩鐢ㄢ濇潵綆$悊涓茬殑錛屸滃紩鐢ㄢ濊繖涓瘝鎴戠浉淇″ぇ瀹跺茍涓嶉檶鐢燂紝璞?/SPAN>Window 鍐呮牳瀵硅薄銆?/SPAN>COM 瀵硅薄絳夐兘鏄氳繃寮曠敤鏉ュ疄鐜扮殑銆傝?/SPAN>CString 涔熸槸閫氳繃榪欐牱鐨勬満鍒舵潵綆$悊鍒嗛厤鐨勫唴瀛樺潡銆傚疄闄呬笂 CString 瀵硅薄鍙湁涓涓寚閽堟垚鍛樺彉閲?/SPAN>, 鎵浠ヤ換浣?/SPAN>CString 瀹炰緥鐨勯暱搴﹀彧鏈?/SPAN>4 瀛楄妭 .
鍗?/SPAN>: int len = sizeof(CString);//len 絳変簬 4
榪欎釜鎸囬拡鎸囧悜涓涓浉鍏崇殑寮曠敤鍐呭瓨鍧楋紝濡傚浘 : CString str("abcd");
0x04040404 head 閮紝涓哄紩鐢ㄥ唴瀛樺潡鐩稿叧淇℃伅
str 0x40404040
姝e洜涓哄姝わ紝涓涓繖鏍風殑鍐呭瓨鍧楀彲琚涓?/SPAN>CString 鎵寮曠敤錛屼緥濡備笅鍒椾唬鐮侊細
CString str("abcd");
CString a = str;
CString b(str);
CString c;
c = b;
涓婇潰浠g爜鐨勭粨鏋滄槸錛氫笂闈㈠洓涓璞?/SPAN>(str,a,b,c) 涓殑鎴愬憳鍙橀噺鎸囬拡鏈夌浉鍚岀殑鍊鹼紝閮戒負 0x40404040. 鑰岃繖鍧楀唴瀛樺潡鎬庝箞鐭ラ亾鏈夊灝戜釜 CString 寮曠敤瀹冨憿錛熷悓鏍鳳紝瀹冧篃浼氳褰曚竴浜涗俊鎭傚琚紩鐢ㄦ暟錛屼覆闀垮害錛屽垎閰嶅唴瀛橀暱搴︺?/SPAN>
榪欏潡寮曠敤鍐呭瓨鍧楃殑緇撴瀯瀹氫箟濡備笅錛?/SPAN>
struct CStringData
{
long nRefs; //琛ㄧず鏈夊灝戜釜 CString 寮曠敤瀹?/SPAN>. 4
int nDataLength; //涓插疄闄呴暱搴?/SPAN>. 4
int nAllocLength; //鎬誨叡鍒嗛厤鐨勫唴瀛橀暱搴︼紙涓嶈榪欏ご閮ㄧ殑 12 瀛楄妭錛?/SPAN>. 4
};
鐢變簬鏈変簡榪欎簺淇℃伅錛?/SPAN>CString 灝辮兘姝g‘鍦板垎閰嶃佺鐞嗐侀噴鏀懼紩鐢ㄥ唴瀛樺潡銆?/SPAN>
濡傛灉浣犳兂鍦ㄨ皟璇曠▼搴忕殑鏃跺欒幏寰楄繖浜涗俊鎭傚彲浠ュ湪 Watch 紿楀彛閿叆涓嬪垪琛ㄨ揪寮忥細
(CStringData*)((CStringData*)(this->m_pchData)-1) 鎴?/SPAN>
(CStringData*)((CStringData*)(str.m_pchData)-1)//str 涓烘寚 CString 瀹炰緥
姝e洜涓洪噰鐢ㄤ簡榪欐牱鐨勫ソ鏈哄埗錛屼嬌寰?/SPAN>CString 鍦ㄥぇ閲忔嫹璐濇椂錛屼笉浠呮晥鐜囬珮錛岃屼笖鍒嗛厤鍐呭瓨灝戙?/SPAN>
2 錛?/SPAN>LPCTSTR 涓?/SPAN> GetBuffer(int nMinBufLength)
榪欎袱涓嚱鏁版彁渚涗簡涓庢爣鍑?/SPAN>C 鐨勫吋瀹硅漿鎹€傚湪瀹為檯涓嬌鐢ㄩ鐜囧緢楂橈紝浣嗗嵈鏄渶瀹規槗鍑洪敊鐨勫湴鏂廣傝繖涓や釜鍑芥暟瀹為檯涓婅繑鍥炵殑閮芥槸鎸囬拡錛屼絾瀹冧滑鏈変綍鍖哄埆鍛紵浠ュ強璋冪敤瀹冧滑鍚庯紝騫曞悗鏄仛浜嗘庢牱鐨勫鐞嗚繃紼嬪憿錛?/SPAN>
(1) LPCTSTR 瀹冪殑鎵ц榪囩▼鍏跺疄寰堢畝鍗曪紝鍙槸榪斿洖寮曠敤鍐呭瓨鍧楃殑涓插湴鍧銆?/SPAN> 瀹冩槸浣滀負鎿嶄綔絎﹂噸杞芥彁渚涚殑錛屾墍浠ュ湪浠g爜涓湁鏃跺彲浠ラ殣寮忚漿鎹紝鑰屾湁鏃跺嵈闇寮哄埗杞埗銆傚錛?/SPAN>
CString str;
const char* p = (LPCTSTR)str;
//鍋囪鏈夎繖鏍風殑涓涓嚱鏁幫紝 Test(const char* p) 錛?/SPAN> 浣犲氨鍙互榪欐牱璋冪敤
Test(str);//榪欓噷浼氶殣寮忚漿鎹負 LPCTSTR
(2) GetBuffer(int nMinBufLength) 瀹冪被浼鹼紝涔熶細榪斿洖涓涓寚閽堬紝涓嶈繃瀹冩湁鐐瑰樊鍒?/SPAN>, 榪斿洖鐨勬槸 LPTSTR
(3) 榪欎袱鑰呭埌搴曟湁浣曚笉鍚屽憿錛熸垜鎯沖憡璇夊ぇ瀹訛紝鍏舵湰璐ㄤ笂瀹屽叏涓嶄竴鏍鳳紝涓鑸 LPCTSTR 杞崲鍚庡彧搴旇褰撳父閲忎嬌鐢紝鎴栬呭仛鍑芥暟鐨勫叆鍙傦紱鑰?/SPAN>GetBuffer(...) 鍙栧嚭鎸囬拡鍚庯紝鍙互閫氳繃榪欎釜鎸囬拡鏉ヤ慨鏀歸噷闈㈢殑鍐呭錛屾垨鑰呭仛鍑芥暟鐨勫嚭鍙傘備負浠涔堝憿錛熶篃璁哥粡甯告湁榪欐牱鐨勪唬鐮侊細
CString str("abcd");
char* p = (char*)(const char*)str;
p[2] = 'z';
鍏跺疄錛屼篃璁告湁榪欐牱鐨勪唬鐮佸悗錛屼綘鐨勭▼搴忓茍娌℃湁閿欙紝鑰屼笖紼嬪簭涔熻繍琛屽緱鎸哄ソ銆備絾瀹冨嵈鏄潪甯稿嵄闄╃殑銆傚啀鐪?/SPAN>
CString str("abcd");
CString test = str;
....
char* p = (char*)(const char*)str;
p[2] = 'z';
strcpy(p, "akfjaksjfakfakfakj");//榪欎笅瀹岃泲浜?/SPAN>
浣犵煡閬撴鏃訛紝 test 涓殑鍊兼槸澶氬皯鍚楋紵絳旀鏄?/SPAN>"abzd" 銆傚畠涔熻窡鐫鏀瑰彉浜嗭紝榪欎笉鏄綘鎵鏈熸湜鍙戠敓鐨勩備絾涓轟粈涔堜細榪欐牱鍛紵浣犵◢寰兂鎯沖氨浼氭槑鐧斤紝鍓嶉潰璇磋繃錛屽洜涓?/SPAN>CString 鏄寚鍚戝紩鐢ㄥ潡鐨勶紝 str 涓?/SPAN>test 鎸囧悜鍚屼竴鍧楀湴鏂?/SPAN>, 褰撲綘 p[2]='z' 鍚庯紝褰撶劧 test 涔熶細闅忕潃鏀瑰彉銆傛墍浠ョ敤瀹冨仛 LPCTSTR 鍋氳漿鎹㈠悗錛屼綘鍙兘鍘昏榪欏潡鏁版嵁錛屽崈涓囧埆鍘繪敼鍙樺畠鐨勫唴瀹廣?/SPAN>
鍋囧鎴戞兂鐩存帴閫氳繃鎸囬拡鍘諱慨鏀規暟鎹殑璇濓紝閭f庢牱鍔炲憿錛熷氨鏄敤 GetBuffer(...). 鐪嬩笅榪頒唬鐮侊細
CString str("abcd");
CString test = str;
....
char* p = str.GetBuffer(20);
p[2] = 'z'; // 鎵ц鍒版錛岀幇鍦?/SPAN>test 涓煎嵈浠嶆槸 "abcd"
strcpy(p, "akfjaksjfakfakfakj"); // 鎵ц鍒版錛岀幇鍦?/SPAN>test 涓艱繕鏄?/SPAN>"abcd"
涓轟粈涔堜細榪欐牱錛熷叾瀹?/SPAN>GetBuffer(20) 璋冪敤鏃訛紝瀹冨疄闄呬笂鍙﹀寤虹珛浜嗕竴鍧楁柊鍐呭潡瀛橈紝騫跺垎閰?/SPAN>20 瀛楄妭闀垮害鐨?/SPAN>buffer 錛岃屽師鏉ョ殑鍐呭瓨鍧楀紩鐢ㄨ鏁頒篃鐩稿簲鍑?/SPAN>1. 鎵浠ユ墽琛屼唬鐮佸悗 str 涓?/SPAN>test 鏄寚鍚戜簡涓ゅ潡涓嶅悓鐨勫湴鏂癸紝鎵浠ョ浉瀹夋棤浜嬨?/SPAN>
(4) 涓嶈繃榪欓噷榪樻湁涓鐐規敞鎰忎簨欏癸細灝辨槸 str.GetBuffer(20) 鍚庯紝 str 鐨勫垎閰嶉暱搴︿負 20 錛屽嵆鎸囬拡 p 瀹冩墍鎸囧悜鐨?/SPAN>buffer 鍙湁 20 瀛楄妭闀匡紝緇欏畠璧嬪兼椂錛屽垏涓嶅彲瓚呰繃錛屽惁鍒欑伨闅劇浣犱笉榪滀簡錛涘鏋滄寚瀹氶暱搴﹀皬浜庡師鏉ヤ覆闀垮害錛屽 GetBuffer(1), 瀹為檯涓婂畠浼氬垎閰?/SPAN>4 涓瓧鑺傞暱搴︼紙鍗沖師鏉ヤ覆闀垮害錛夛紱鍙﹀錛屽綋璋冪敤 GetBuffer(...) 鍚庡茍鏀瑰彉鍏跺唴瀹癸紝涓瀹氳璁板緱璋冪敤 ReleaseBuffer(), 榪欎釜鍑芥暟浼氭牴鎹覆鍐呭鏉ユ洿鏂板紩鐢ㄥ唴瀛樺潡鐨勫ご閮ㄤ俊鎭?/SPAN>
(5) 鏈鍚庤繕鏈変竴娉ㄦ剰浜嬮」錛岀湅涓嬭堪浠g爜錛?/SPAN>
char* p = NULL;
const char* q = NULL;
{
CString str = "abcd";
q = (LPCTSTR)str;
p = str.GetBuffer(20);
AfxMessageBox(q);// 鍚堟硶鐨?/SPAN>
strcpy(p, "this is test");//鍚堟硶鐨勶紝
}
AfxMessageBox(q);// 闈炴硶鐨勶紝鍙兘瀹岃泲
strcpy(p, "this is test");//闈炴硶鐨勶紝鍙兘瀹岃泲
榪欓噷瑕佽鐨勫氨鏄紝褰撹繑鍥炶繖浜涙寚閽堝悗錛?/SPAN> 濡傛灉 CString 瀵硅薄鐢熷懡緇撴潫錛岃繖浜涙寚閽堜篃鐩稿簲鏃犳晥銆?/SPAN>
3 錛庢嫹璐?/SPAN> & 璧嬪?/SPAN> & " 寮曠敤鍐呭瓨鍧?/SPAN>" 浠涔堟椂鍊欓噴鏀撅紵
涓嬮潰婕旂ず涓孌典唬鐮佹墽琛岃繃紼?/SPAN>
void Test()
{
CString str("abcd");
//str 鎸囧悜涓寮曠敤鍐呭瓨鍧楋紙寮曠敤鍐呭瓨鍧楃殑寮曠敤璁℃暟涓?/SPAN>1, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
CString a;
//a 鎸囧悜涓鍒濆鏁版嵁鐘舵侊紝
a = str;
//a 涓?/SPAN>str 鎸囧悜鍚屼竴寮曠敤鍐呭瓨鍧楋紙寮曠敤鍐呭瓨鍧楃殑寮曠敤璁℃暟涓?/SPAN>2, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
CString b(a);
//a 銆?/SPAN>b 涓?/SPAN>str 鎸囧悜鍚屼竴寮曠敤鍐呭瓨鍧楋紙寮曠敤鍐呭瓨鍧楃殑寮曠敤璁℃暟涓?/SPAN>3, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
{
LPCTSTR temp = (LPCTSTR)a;
//temp 鎸囧悜寮曠敤鍐呭瓨鍧楃殑涓查鍦板潃銆傦紙寮曠敤鍐呭瓨鍧楃殑寮曠敤璁℃暟涓?/SPAN>3, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
CString d = a;
//a 銆?/SPAN>b 銆?/SPAN>d 涓?/SPAN>str 鎸囧悜鍚屼竴寮曠敤鍐呭瓨鍧楋紙寮曠敤鍐呭瓨鍧楃殑寮曠敤璁℃暟涓?/SPAN>4, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
b = "testa";
// 榪欐潯璇彞瀹為檯鏄皟鐢?/SPAN>CString::operator=(CString&) 鍑芥暟銆?/SPAN> b鎸囧悜涓鏂板垎閰嶇殑寮曠敤鍐呭瓨鍧椼傦紙鏂板垎閰嶇殑寮曠敤鍐呭瓨鍧楃殑 寮曠敤璁℃暟涓?/SPAN>1, 闀垮害涓?/SPAN>5, 鍒嗛厤闀垮害涓?/SPAN>5 錛?/SPAN>
// 鍚屾椂鍘熷紩鐢ㄥ唴瀛樺潡寮曠敤璁℃暟鍑?/SPAN>1. a 銆?/SPAN>d 涓?/SPAN>str 浠嶆寚鍚戝師 寮曠敤鍐呭瓨鍧楋紙寮曠敤鍐呭瓨鍧楃殑寮曠敤璁℃暟涓?/SPAN>3, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
}
// 鐢變簬 d 鐢熷懡緇撴潫錛岃皟鐢ㄦ瀽鏋勫嚱鏁幫紝瀵艱嚦寮曠敤璁℃暟鍑?/SPAN>1 錛堝紩鐢ㄥ唴瀛樺潡鐨勫紩鐢ㄨ鏁頒負 2, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
LPTSTR temp = a.GetBuffer(10);
// 姝よ鍙ヤ篃浼氬鑷撮噸鏂板垎閰嶆柊鍐呭瓨鍧椼?/SPAN>temp 鎸囧悜鏂板垎閰嶅紩鐢ㄥ唴瀛樺潡鐨勪覆棣栧湴鍧錛堟柊 鍒嗛厤鐨勫紩鐢ㄥ唴瀛樺潡鐨勫紩鐢ㄨ鏁頒負 1, 闀垮害涓?/SPAN>0, 鍒嗛厤闀垮害涓?/SPAN>10 錛?/SPAN>
// 鍚屾椂鍘熷紩鐢ㄥ唴瀛樺潡寮曠敤璁℃暟鍑?/SPAN>1. 鍙湁 str 浠?/SPAN> 鎸囧悜鍘熷紩鐢ㄥ唴瀛樺潡 錛堝紩鐢ㄥ唴瀛樺潡鐨勫紩鐢ㄨ鏁頒負 1, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>4 錛?/SPAN>
strcpy(temp, "temp");
//a 鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡鐨勫紩鐢ㄨ鏁頒負 1, 闀垮害涓?/SPAN>0, 鍒嗛厤闀垮害涓?/SPAN>10 a.ReleaseBuffer();// 娉ㄦ剰 :a 鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡鐨勫紩鐢ㄨ鏁頒負 1, 闀垮害涓?/SPAN>4, 鍒嗛厤闀垮害涓?/SPAN>10
}
//鎵ц鍒版錛屾墍鏈夌殑灞閮ㄥ彉閲忕敓鍛藉懆鏈熼兘宸茬粨鏉熴傚璞?/SPAN>str a b 鍚勮嚜璋冪敤鑷繁鐨勬瀽鏋勬瀯
//鍑芥暟錛屾墍鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡涔熺浉搴斿噺 1
//娉ㄦ剰錛?/SPAN>str a b 鎵鍒嗗埆鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡鐨勮鏁板潎涓?/SPAN>0, 榪欏鑷存墍鍒嗛厤鐨勫唴瀛樺潡閲婃斁
閫氳繃瑙傚療涓婇潰鎵ц榪囩▼錛屾垜浠細鍙戠幇 CString 铏界劧鍙互澶氫釜瀵硅薄鎸囧悜鍚屼竴寮曠敤鍐呭潡瀛橈紝浣嗘槸瀹冧滑鍦ㄨ繘琛屽悇縐嶆嫹璐濄佽祴鍊煎強鏀瑰彉涓插唴瀹規椂錛屽畠鐨勫鐞嗘槸寰堟櫤鑳藉茍涓旈潪甯稿畨鍏ㄧ殑錛屽畬鍏ㄥ仛鍒頒簡浜掍笉騫叉秹銆佷簰涓嶅獎鍝嶃傚綋鐒跺繀欏昏姹備綘鐨勪唬鐮佷嬌鐢ㄦ紜伆褰擄紝鐗瑰埆鏄疄闄呬嬌鐢ㄤ腑浼氭湁鏇村鏉傜殑鎯呭喌錛屽鍋氬嚱鏁板弬鏁般佸紩鐢ㄣ佸強鏈夋椂闇淇濆瓨鍒?/SPAN>CStringList 褰撲腑錛屽鏋滃摢鎬曟湁涓灝忓潡鍦版柟浣跨敤涓嶅綋錛屽叾緇撴灉涔熶細瀵艱嚧鍙戠敓涓嶅彲棰勭煡鐨勯敊璇?/SPAN>
5 FreeExtra() 鐨勪綔鐢?/SPAN>
鐪嬭繖孌典唬鐮?/SPAN>
(1) CString str("test");
(2) LPTSTR temp = str.GetBuffer(50);
(3) strcpy(temp, "there are 22 character");
(4) str.ReleaseBuffer();
(5) str.FreeExtra();
涓婇潰浠g爜鎵ц鍒扮 (4) 琛屾椂錛屽ぇ瀹墮兘鐭ラ亾 str 鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡璁℃暟涓?/SPAN>1, 闀垮害涓?/SPAN>22, 鍒嗛厤闀垮害涓?/SPAN>50. 閭d箞鎵ц str.FreeExtra() 鏃訛紝瀹冧細閲婃斁鎵鍒嗛厤鐨勫浣欑殑鍐呭瓨銆?/SPAN>( 寮曠敤鍐呭瓨鍧楄鏁頒負 1, 闀垮害涓?/SPAN>22, 鍒嗛厤闀垮害涓?/SPAN>22)
6 Format(...) 涓?/SPAN> FormatV(...)
榪欐潯璇彞鍦ㄤ嬌鐢ㄤ腑鏄渶瀹規槗鍑洪敊鐨勩傚洜涓哄畠鏈瀵屾湁鎶宸фэ紝涔熺浉褰撶伒媧匯傚湪榪欓噷錛屾垜娌℃墦綆楀瀹冪粏緇嗗垎鏋愶紝瀹為檯涓?/SPAN>sprintf(...) 鎬庝箞鐢紝瀹冨氨鎬庝箞鐢ㄣ傛垜鍙彁閱掍嬌鐢ㄦ椂闇娉ㄦ剰涓鐐癸細灝辨槸瀹冪殑鍙傛暟鐨勭壒孌婃э紝鐢變簬緙栬瘧鍣ㄥ湪緙栬瘧鏃跺茍涓嶈兘鍘繪牎楠屾牸寮忎覆鍙傛暟涓庡搴旂殑鍙樺厓鐨勭被鍨嬪強闀垮害銆傛墍浠ヤ綘蹇呴』瑕佹敞鎰忥紝涓よ呬竴瀹氳瀵瑰簲涓婏紝
鍚﹀垯灝變細鍑洪敊銆傚錛?/SPAN>
CString str;
int a = 12;
str.Format("first:%l, second: %s", a, "error");//result?璇曡瘯
7 LockBuffer() 涓?/SPAN> UnlockBuffer()
欏懼悕鎬濊錛岃繖涓や釜鍑芥暟鐨勪綔鐢ㄥ氨鏄寮曠敤鍐呭瓨鍧楄繘琛屽姞閿佸強瑙i攣銆備絾浣跨敤瀹冩湁浠涔堜綔鐢ㄥ強鎵ц榪囧畠鍚庡 CString 涓叉湁浠涔堝疄璐ㄤ笂鐨勫獎鍝嶃傚叾瀹炴尯綆鍗曪紝鐪嬩笅闈唬鐮?/SPAN>:
(1) CString str("test");
(2) str.LockBuffer();
(3) CString temp = str;
(4) str.UnlockBuffer();
(5) str.LockBuffer();
(6) str = "error";
(7) str.ReleaseBuffer();
鎵ц瀹?/SPAN>(3) 鍚庯紝涓庨氬父鎯呭喌涓嬩笉鍚岋紝 temp 涓?/SPAN>str 騫朵笉鎸囧悜鍚屼竴寮曠敤鍐呭瓨鍧椼備綘鍙互鍦?/SPAN>watch 紿楀彛鐢ㄨ繖涓〃杈懼紡 (CStringData*)((CStringData*)(str.m_pchData)-1) 鐪嬬湅銆?/SPAN>
鍏跺疄鍦?/SPAN>msdn 涓湁璇存槑錛?/SPAN>
While in a locked state, the string is protected in two ways:
No other string can get a reference to the data in the locked string, even if that string is assigned to the locked string.
The locked string will never reference another string, even if that other string is copied to the locked string.
8 CString 鍙槸澶勭悊涓插悧錛?/SPAN>
涓嶅錛?/SPAN>CString 涓嶅彧鏄兘鎿嶄綔涓詫紝鑰屼笖榪樿兘澶勭悊鍐呭瓨鍧楁暟鎹傚姛鑳藉畬鍠勫惂錛佺湅榪欐浠g爜
char p[20];
for(int loop=0; loop<sizeof(p); loop++)
{
p[loop] = 10-loop;
}
CString str((LPCTSTR)p, 20);
char temp[20];
memcpy(temp, str, str.GetLength());
str瀹屽叏鑳藉杞澆鍐呭瓨鍧?/SPAN>p 鍒板唴瀛樺潡 temp 涓傛墍浠ヨ兘鐢?/SPAN>CString 鏉ュ鐞嗕簩榪涘埗鏁版嵁
8 AllocSysString() 涓?/SPAN>SetSysString(BSTR*)
榪欎袱涓嚱鏁版彁渚涗簡涓蹭笌 BSTR 鐨勮漿鎹€備嬌鐢ㄦ椂欏繪敞鎰忎竴鐐癸細褰撹皟鐢?/SPAN>AllocSysString() 鍚庯紝欏昏皟鐢ㄥ畠 SysFreeString(...)
9 鍙傛暟鐨勫畨鍏ㄦ楠?/SPAN>
鍦?/SPAN>MFC 涓彁渚涗簡澶氫釜瀹忔潵榪涜鍙傛暟鐨勫畨鍏ㄦ鏌ワ紝濡傦細 ASSERT. 鍏朵腑鍦?/SPAN>CString 涓篃涓嶄緥澶栵紝鏈夎澶氳繖鏍風殑鍙傛暟媯楠岋紝鍏跺疄榪欎篃璇存槑浜嗕唬鐮佺殑瀹夊叏鎬ч珮錛屽彲鏈夋椂鎴戜滑浼氬彂鐜拌繖寰堢儲錛屼篃瀵艱嚧 Debug 涓?/SPAN>Release 鐗堟湰涓嶄竴鏍鳳紝濡傛湁鏃剁▼搴?/SPAN>Debug 閫氭甯革紝鑰?/SPAN>Release 鍒欑▼搴忓穿婧冿紱鑰屾湁鏃舵伆鐩稿弽錛?/SPAN>Debug 涓嶈錛?/SPAN>Release 琛屻傚叾瀹炴垜涓漢璁や負錛屾垜浠 CString 鐨勪嬌鐢ㄨ繃紼嬩腑錛屽簲鍔涙眰浠g爜璐ㄩ噺楂橈紝涓嶈兘鍦?/SPAN>Debug 鐗堟湰涓嚭鐜頒換浣曟柇璦妗嗭紝鍝?/SPAN>release 榪愯浼間箮鐪嬭搗鏉ヤ竴鍒囨甯搞備絾寰堜笉瀹夊叏銆傚涓嬩唬鐮侊細
(1) CString str("test");
(2) str.LockBuffer();
(3) LPTSTR temp = str.GetBuffer(10);
(4) strcpy(temp, "error");
(5) str.ReleaseBuffer();
(6) str.ReleaseBuffer();//鎵ц鍒版鏃訛紝 Debug 鐗堟湰浼氬脊鍑洪敊妗?/SPAN>
10 CString 鐨勫紓甯稿鐞?/SPAN>
鎴戝彧鎯沖己璋冧竴鐐癸細鍙湁鍒嗛厤鍐呭瓨鏃訛紝鎵嶆湁鍙兘瀵艱嚧鎶涘嚭 CMemoryException.
鍚屾牱錛屽湪 msdn 涓殑鍑芥暟澹版槑涓紝娉ㄦ湁 throw( CMemoryException) 鐨勫嚱鏁伴兘鏈夐噸鏂板垎閰嶆垨璋冩暣鍐呭瓨鐨勫彲鑳姐?/SPAN>
11 璺ㄦā鍧楁椂鐨?/SPAN>Cstring 銆傚嵆涓涓?/SPAN>DLL 鐨勬帴鍙e嚱鏁頒腑鐨勫弬鏁頒負 CString& 鏃訛紝瀹冧細鍙戠敓鎬庢牱鐨勭幇璞°傝В絳旀垜閬囧埌鐨勯棶棰樸傛垜鐨勯棶棰樺師鏉ュ凡緇忓彂璐達紝鍦板潃涓猴細
http://www.csdn.net/expert/topic/741/741921.xml?temp=.2283136
鏋勯犱竴涓繖鏍?/SPAN>CString 瀵硅薄鏃訛紝濡?/SPAN>CString str 錛屼綘鍙煡閬撴鏃剁殑 str 鎵鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡鍚楋紵涔熻浣犱細璁や負瀹冩寚鍚?/SPAN>NULL 銆傚叾瀹炰笉瀵癸紝濡傛灉榪欐牱鐨勮瘽錛?/SPAN>CString 鎵閲囩敤鐨勫紩鐢ㄦ満鍒剁鐞嗗唴瀛樺潡灝變細鏈夐夯鐑︿簡錛屾墍浠?/SPAN>CString 鍦ㄦ瀯閫犱竴涓┖涓茬殑瀵硅薄鏃訛紝瀹冧細鎸囧悜涓涓浐瀹氱殑鍒濆鍖栧湴鍧錛岃繖鍧楁暟鎹殑澹版槑濡備笅錛?/SPAN>
AFX_STATIC_DATA int _afxInitData[] = {-1,0,0,0};
綆瑕佹弿榪版鎷竴涓嬶細褰撴煇涓?/SPAN>CString 瀵硅薄涓茬疆絀虹殑璇濓紝濡?/SPAN>Empty(),CString a 絳夛紝瀹冪殑鎴愬憳鍙橀噺 m_pchData 灝變細鎸囧悜 _afxInitData 榪欎釜鍙橀噺鐨勫湴鍧銆傚綋榪欎釜 CString 瀵硅薄鐢熷懡鍛ㄦ湡緇撴潫鏃訛紝姝e父鎯呭喌涓嬪畠浼氬幓瀵規墍鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡璁℃暟鍑?/SPAN>1 錛屽鏋滃紩鐢ㄨ鏁頒負 0( 鍗蟲病鏈変換浣?/SPAN>CString 寮曠敤瀹冩椂 ) 錛屽垯閲婃斁榪欏潡寮曠敤鍐呭瓨銆傝岀幇鍦ㄧ殑鎯呭喌鏄鏋?/SPAN>CString 鎵鎸囧悜鐨勫紩鐢ㄥ唴瀛樺潡鏄垵濮嬪寲鍐呭瓨鍧楁椂錛屽垯涓嶄細閲婃斁浠諱綍鍐呭瓨銆?/SPAN>
璇翠簡榪欎箞澶氾紝榪欎笌鎴戦亣鍒扮殑闂鏈変粈涔堝叧緋誨憿錛熷叾瀹炲叧緋誨ぇ鐫鍛紵鍏剁湡姝e師鍥犲氨鏄鏋?/SPAN>exe 妯″潡涓?/SPAN>dll 妯″潡鏈変竴涓槸 static 緙栬瘧榪炴帴鐨勮瘽銆傞偅涔堣繖涓?/SPAN>CString 鍒濆鍖栨暟鎹湪 exe 妯″潡涓?/SPAN>dll 妯″潡涓湁涓嶅悓鐨勫湴鍧錛屽洜涓?/SPAN>static 榪炴帴鍒欎細鍦ㄦ湰妯″潡涓湁涓浠芥簮浠g爜鐨勬嫹璐濄傚彟澶栦竴縐嶆儏鍐碉紝濡傛灉涓や釜妯″潡閮芥槸 share 榪炴帴鐨勶紝 CString 鐨勫疄鐜頒唬鐮佸垯鍦ㄥ彟涓涓崟鐙殑 dll 涓疄鐜幫紝鑰?/SPAN>AFX_STATIC_DATA 鎸囧畾鍙橀噺鍙涓嬈★紝鎵浠ヤ袱涓ā鍧椾腑 _afxInitData 鏈夌浉鍚岀殑鍦板潃銆?/SPAN>
鐜板湪闂瀹屽叏鏄庣櫧浜嗗惂錛佷綘鍙互鑷繁鍘繪紨紺轟竴涓嬨?/SPAN>
__declspec (dllexport) void test(CString& str)
{
str = "abdefakdfj";//濡傛灉鏄?/SPAN>static 榪炴帴錛屽茍涓斾紶鍏ョ殑 str 涓虹┖涓茬殑璇濓紝榪欓噷鍑洪敊銆?/SPAN>
}
鏈鍚庝竴鐐規兂娉曪細鍐欏緱榪欓噷錛屽叾瀹?/SPAN>CString 涓繕鏈夎澶氭妧宸фх殑濂戒笢涓滐紝鎴戝茍娌″幓瑙i噴銆傚寰堝閲嶈澆鐨勬搷浣滅銆佹煡鎵劇瓑銆傛垜璁や負榪樻槸璇︾粏鐪嬬湅 msdn 錛岃繖鏍蜂篃璁鎬細姣旀垜璁茬殑濂藉浜嗐傛垜鍙晶閲嶉偅浜涘彲鑳戒細鍑洪敊鐨勬儏鍐點傚綋鐒訛紝濡傛垜涓婇潰鍙欒堪涓湁閿欒錛屾暚璇烽珮鎵嬫寚鐐癸紝涓嶈儨鎰熻阿錛?/SPAN>
]]> 鎸囬拡鍑芥暟鍜屽嚱鏁版寚閽?/title> http://m.shnenglu.com/ivenher/articles/915.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Thu, 03 Nov 2005 03:26:00 GMT http://m.shnenglu.com/ivenher/articles/915.html http://m.shnenglu.com/ivenher/comments/915.html http://m.shnenglu.com/ivenher/articles/915.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/915.html http://m.shnenglu.com/ivenher/services/trackbacks/915.html 涓銆佹寚閽堝嚱鏁?SPAN lang=EN-US> 褰撲竴涓嚱鏁板0鏄庡叾榪斿洖鍊間負涓涓寚閽堟椂錛屽疄闄呬笂灝辨槸榪斿洖涓涓湴鍧緇欒皟鐢ㄥ嚱鏁幫紝浠ョ敤浜庨渶瑕佹寚閽堟垨鍦板潃鐨勮〃杈懼紡涓?SPAN lang=EN-US> 鏍煎紡錛?SPAN lang=EN-US> 綾誨瀷璇存槑絎?SPAN lang=EN-US> * 鍑芥暟鍚?SPAN lang=EN-US>(鍙傛暟) 褰撶劧浜嗭紝鐢變簬榪斿洖鐨勬槸涓涓湴鍧錛屾墍浠ョ被鍨嬭鏄庣涓鑸兘鏄?SPAN lang=EN-US>int銆?SPAN lang=EN-US> 渚嬪錛?SPAN lang=EN-US>int *GetDate(); int * aaa(int,int); 鍑芥暟榪斿洖鐨勬槸涓涓湴鍧鍊鹼紝緇忓父浣跨敤鍦ㄨ繑鍥炴暟緇勭殑鏌愪竴鍏冪礌鍦板潃涓娿?SPAN lang=EN-US> int * GetDate(int wk,int dy); main() { int wk,dy; do { printf("Enter week(1-5)day(1-7)\n"); scanf("%d%d",&wk,&dy); } while(wk<1||wk>5||dy<1||dy>7); printf("%d\n",*GetDate(wk,dy)); } int * GetDate(int wk,int dy) { static int calendar[5][7]= { {1,2,3,4,5,6,7}, {8,9,10,11,12,13,14}, {15,16,17,18,19,20,21}, {22,23,24,25,26,27,28}, {29,30,31,-1} }; return &calendar[wk-1][dy-1]; } 紼嬪簭搴旇鏄緢濂界悊瑙g殑錛屽瓙鍑芥暟榪斿洖鐨勬槸鏁扮粍鏌愬厓绱犵殑鍦板潃銆傝緭鍑虹殑鏄繖涓湴鍧閲岀殑鍊箋?SPAN lang=EN-US> 浜屻佸嚱鏁版寚閽?SPAN lang=EN-US> 鎸囧悜鍑芥暟鐨勬寚閽堝寘鍚簡鍑芥暟鐨勫湴鍧錛屽彲浠ラ氳繃瀹冩潵璋冪敤鍑芥暟銆傚0鏄庢牸寮忓涓嬶細 綾誨瀷璇存槑絎?SPAN lang=EN-US> (*鍑芥暟鍚?SPAN lang=EN-US>)(鍙傛暟) 鍏跺疄榪欓噷涓嶈兘縐頒負鍑芥暟鍚嶏紝搴旇鍙仛鎸囬拡鐨勫彉閲忓悕銆傝繖涓壒孌婄殑鎸囬拡鎸囧悜涓涓繑鍥炴暣鍨嬪肩殑鍑芥暟銆傛寚閽堢殑澹版槑絎斿墛鍜屽畠鎸囧悜鍑芥暟鐨勫0鏄庝繚鎸佷竴鑷淬?SPAN lang=EN-US> 鎸囬拡鍚嶅拰鎸囬拡榪愮畻絎﹀闈㈢殑鎷彿鏀瑰彉浜嗛粯璁ょ殑榪愮畻絎︿紭鍏堢駭銆傚鏋滄病鏈夊渾鎷彿錛屽氨鍙樻垚浜嗕竴涓繑鍥炴暣鍨嬫寚閽堢殑鍑芥暟鐨勫師鍨嬪0鏄庛?SPAN lang=EN-US> 渚嬪錛?SPAN lang=EN-US> void (*fptr)(); 鎶婂嚱鏁扮殑鍦板潃璧嬪肩粰鍑芥暟鎸囬拡錛屽彲浠ラ噰鐢ㄤ笅闈袱縐嶅艦寮忥細 fptr=&Function; fptr=Function; 鍙栧湴鍧榪愮畻絎?SPAN lang=EN-US>&涓嶆槸蹇呴渶鐨勶紝鍥犱負鍗曞崟涓涓嚱鏁版爣璇嗙灝辨爣鍙瘋〃紺轟簡瀹冪殑鍦板潃錛屽鏋滄槸鍑芥暟璋冪敤錛岃繕蹇呴』鍖呭惈涓涓渾鎷彿鎷搗鏉ョ殑鍙傛暟琛ㄣ?SPAN lang=EN-US> 鍙互閲囩敤濡備笅涓ょ鏂瑰紡鏉ラ氳繃鎸囬拡璋冪敤鍑芥暟錛?SPAN lang=EN-US> x=(*fptr)(); x=fptr(); 絎簩縐嶆牸寮忕湅涓婂幓鍜屽嚱鏁拌皟鐢ㄦ棤寮傘備絾鏄湁浜涚▼搴忓憳鍊懼悜浜庝嬌鐢ㄧ涓縐嶆牸寮忥紝鍥犱負瀹冩槑紜寚鍑烘槸閫氳繃鎸囬拡鑰岄潪鍑芥暟鍚嶆潵璋冪敤鍑芥暟鐨勩備笅闈婦涓涓緥瀛愶細 void (*funcp)(); void FileFunc(),EditFunc(); main() { funcp=FileFunc; (*funcp)(); funcp=EditFunc; (*funcp)(); } void FileFunc() { printf("FileFunc\n"); } void EditFunc() { printf("EditFunc\n"); } 紼嬪簭杈撳嚭涓猴細 FileFunc EditFunc 涓夈佹寚閽堢殑鎸囬拡 鎸囬拡鐨勬寚閽堢湅涓婂幓鏈変簺浠や漢璐硅В銆傚畠浠殑澹版槑鏈変袱涓槦鍙楓備緥濡傦細 char ** cp; 濡傛灉鏈変笁涓槦鍙鳳紝閭e氨鏄寚閽堢殑鎸囬拡鐨勬寚閽堬紝鍥涗釜鏄熷彿灝辨槸鎸囬拡鐨勬寚閽堢殑鎸囬拡鐨勬寚閽堬紝渚濇綾繪帹銆傚綋浣犵啛鎮変簡綆鍗曠殑渚嬪瓙浠ュ悗錛屽氨鍙互搴斾粯澶嶆潅鐨勬儏鍐典簡銆傚綋鐒訛紝瀹為檯紼嬪簭涓紝涓鑸篃鍙敤鍒頒簩綰ф寚閽堬紝涓変釜鏄熷彿涓嶅父瑙侊紝鏇村埆璇村洓涓槦鍙蜂簡銆?SPAN lang=EN-US> 鎸囬拡鐨勬寚閽堥渶瑕佺敤鍒版寚閽堢殑鍦板潃銆?SPAN lang=EN-US> char c='A'; char *p=&c; char **cp=&p; 閫氳繃鎸囬拡鐨勬寚閽堬紝涓嶄粎鍙互璁塊棶瀹冩寚鍚戠殑鎸囬拡錛岃繕鍙互璁塊棶瀹冩寚鍚戠殑鎸囬拡鎵鎸囧悜鐨勬暟鎹備笅闈㈠氨鏄嚑涓繖鏍風殑渚嬪瓙錛?SPAN lang=EN-US> char *p1=*cp; char c1=**cp; 浣犲彲鑳芥兂鐭ラ亾榪欐牱鐨勭粨鏋勬湁浠涔堢敤銆傚埄鐢ㄦ寚閽堢殑鎸囬拡鍙互鍏佽琚皟鐢ㄥ嚱鏁頒慨鏀瑰眬閮ㄦ寚閽堝彉閲忓拰澶勭悊鎸囬拡鏁扮粍銆?SPAN lang=EN-US> void FindCredit(int **); main() { int vals[]={7,6,5,-4,3,2,1,0}; int *fp=vals; FindCredit(&fp); printf("%d\n",*fp); } void FindCredit(int ** fpp) { while(**fpp!=0) if(**fpp<0) break; else (*fpp)++; } 棣栧厛鐢ㄤ竴涓暟緇勭殑鍦板潃鍒濆鍖栨寚閽?SPAN lang=EN-US>fp錛岀劧鍚庢妸璇ユ寚閽堢殑鍦板潃浣滀負瀹炲弬浼犻掔粰鍑芥暟FindCredit() 銆?SPAN lang=EN-US>FindCredit()鍑芥暟閫氳繃琛ㄨ揪寮?SPAN lang=EN-US>**fpp闂存帴鍦板緱鍒版暟緇勪腑鐨勬暟鎹備負閬嶅巻鏁扮粍浠ユ壘鍒頒竴涓礋鍊鹼紝FindCredit() 鍑芥暟榪涜鑷榪愮畻鐨勫璞℃槸璋冪敤鑰呯殑鎸囧悜鏁扮粍鐨勬寚閽堬紝鑰屼笉鏄畠鑷繁鐨勬寚鍚戣皟鐢ㄨ呮寚閽堢殑鎸囬拡銆傝鍙?SPAN lang=EN-US>(*fpp)++灝辨槸瀵瑰艦鍙傛寚閽堟寚鍚戠殑鎸囬拡榪涜鑷榪愮畻鐨勩備絾鏄洜涓?SPAN lang=EN-US>*榪愮畻絎﹂珮浜?SPAN lang=EN-US>++榪愮畻絎︼紝鎵浠ュ渾鎷彿鍦ㄨ繖閲屾槸蹇呴』鐨勶紝濡傛灉娌℃湁鍦嗘嫭鍙鳳紝閭d箞++ 榪愮畻絎﹀皢浣滅敤浜庝簩閲嶆寚閽?SPAN lang=EN-US>fpp涓娿?SPAN lang=EN-US> 鍥涖佹寚鍚戞寚閽堟暟緇勭殑鎸囬拡 鎸囬拡鐨勬寚閽堝彟涓鐢ㄦ硶鏃у鐞嗘寚閽堟暟緇勩傛湁浜涚▼搴忓憳鍠滄鐢ㄦ寚閽堟暟緇勬潵浠f浛澶氱淮鏁扮粍錛屼竴涓父瑙佺殑鐢ㄦ硶灝辨槸澶勭悊瀛楃涓層?SPAN lang=EN-US> char *Names[]= { "Bill", "Sam", "Jim", "Paul", "Charles", 0 }; main() { char **nm=Names; while(*nm!=0) printf("%s\n",*nm++); } 鍏堢敤瀛楃鍨嬫寚閽堟暟緇?SPAN lang=EN-US>Names鐨勫湴鍧鏉ュ垵濮嬪寲鎸囬拡nm 銆傛瘡嬈?SPAN lang=EN-US>printf()鐨勮皟鐢ㄩ兘棣栧厛浼犻掓寚閽?SPAN lang=EN-US>nm鎸囧悜鐨勫瓧絎﹀瀷鎸囬拡錛岀劧鍚庡nm 榪涜鑷榪愮畻浣垮叾鎸囧悜鏁扮粍鐨勪笅涓涓厓绱?SPAN lang=EN-US>(榪樻槸鎸囬拡) 銆傛敞鎰忓畬鎴愪笂榪拌涓虹殑璇硶涓?SPAN lang=EN-US>*nm++錛屽畠棣栧厛鍙栧緱鎸囬拡鎸囧悜鐨勫唴瀹癸紝鐒跺悗浣挎寚閽堣嚜澧炪?SPAN lang=EN-US> 娉ㄦ剰鏁扮粍涓殑鏈鍚庝竴涓厓绱犺鍒濆鍖栦負0 錛?SPAN lang=EN-US>while寰幆浠ユ鏉ュ垽鏂槸鍚﹀埌浜嗘暟緇勬湯灝俱傚叿鏈夐浂鍊肩殑鎸囬拡甯稿父琚敤鍋氬驚鐜暟緇勭殑緇堟絎︺傜▼搴忓憳縐伴浂鍊兼寚閽堜負絀烘寚閽?SPAN lang=EN-US>(NULL)銆傞噰鐢ㄧ┖鎸囬拡浣滀負緇堟絎︼紝鍦ㄦ爲縐嶅鍒犲厓绱犳椂錛屽氨涓嶅繀鏀瑰姩閬嶅巻鏁扮粍鐨勪唬鐮侊紝鍥犱負姝ゆ椂鏁扮粍浠嶇劧浠ョ┖鎸囬拡浣滀負緇撴潫銆?/SPAN> ]]> 鏁扮粍鍜屾寚閽?/title> http://m.shnenglu.com/ivenher/articles/912.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Thu, 03 Nov 2005 02:06:00 GMT http://m.shnenglu.com/ivenher/articles/912.html http://m.shnenglu.com/ivenher/comments/912.html http://m.shnenglu.com/ivenher/articles/912.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/912.html http://m.shnenglu.com/ivenher/services/trackbacks/912.html 鎸囬拡鍜屾暟緇勬湁鐫瀵嗗垏鐨勫叧緋?SPAN lang=EN-US>,浠諱綍鑳界敱鏁扮粍涓嬫爣瀹屾垚鐨勬搷浣滀篃閮藉彲鐢ㄦ寚閽堟潵瀹炵幇, 浣嗙▼搴忎腑浣跨敤鎸囬拡鍙嬌浠g爜鏇寸揣鍑戙佹洿鐏墊椿銆?SPAN lang=EN-US> 涓銆佹寚鍚戞暟緇勫厓绱犵殑鎸囬拡 鎴戜滑瀹氫箟涓涓暣鍨嬫暟緇勫拰涓涓寚鍚戞暣鍨嬬殑鎸囬拡鍙橀噺: int a[10], *p; 鍜屽墠闈粙緇嶈繃鐨勬柟娉曠浉鍚?SPAN lang=EN-US>,鍙互浣挎暣鍨嬫寚閽?SPAN lang=EN-US>p鎸囧悜鏁扮粍涓換浣曚竴涓厓绱?SPAN lang=EN-US>,鍋囧畾緇欏嚭璧嬪艱繍綆?SPAN lang=EN-US> p=&a[0]; 姝ゆ椂,p 鎸囧悜鏁扮粍涓殑絎?SPAN lang=EN-US>0鍙峰厓绱?SPAN lang=EN-US>,鍗?SPAN lang=EN-US>a[0],鎸囬拡鍙橀噺p 涓寘鍚簡鏁扮粍鍏冪礌a[0] 鐨勫湴鍧, 鐢變簬鏁扮粍鍏冪礌鍦ㄥ唴瀛樹腑鏄繛緇瓨鏀劇殑, 鍥犳, 鎴戜滑灝卞彲浠ラ氳繃鎸囬拡鍙橀噺p 鍙婂叾鏈夊叧榪愮畻闂存帴璁塊棶鏁扮粍涓殑浠諱綍涓涓厓绱犮?SPAN lang=EN-US> Turbo C涓?SPAN lang=EN-US>,鏁扮粍鍚嶆槸鏁扮粍鐨勭0 鍙峰厓绱犵殑鍦板潃, 鍥犳涓嬮潰涓や釜璇彞鏄瓑浠風殑 p=&a[0]; p=a; 鏍規嵁鍦板潃榪愮畻瑙勫垯,a+1 涓?SPAN lang=EN-US>a[1]鐨勫湴鍧,a+i 灝變負a[i] 鐨勫湴鍧銆?SPAN lang=EN-US> 涓嬮潰鎴戜滑鐢ㄦ寚閽堢粰鍑烘暟緇勫厓绱犵殑鍦板潃鍜屽唴瀹圭殑鍑犵琛ㄧず褰㈠紡錛?SPAN lang=EN-US> (1). p+i鍜?SPAN lang=EN-US>a+i鍧囪〃紺?SPAN lang=EN-US>a[i]鐨勫湴鍧, 鎴栬呰, 瀹冧滑鍧囨寚鍚戞暟緇勭i 鍙峰厓绱?SPAN lang=EN-US>, 鍗蟲寚鍚?SPAN lang=EN-US>a[i]銆?SPAN lang=EN-US> (2). *(p+i)鍜?SPAN lang=EN-US>*(a+i)閮借〃紺?SPAN lang=EN-US>p+i鍜?SPAN lang=EN-US>a+i鎵鎸囧璞$殑鍐呭, 鍗充負a[i] 銆?SPAN lang=EN-US> (3). 鎸囧悜鏁扮粍鍏冪礌鐨勬寚閽?SPAN lang=EN-US>, 涔熷彲浠ヨ〃紺烘垚鏁扮粍鐨勫艦寮?SPAN lang=EN-US>,涔熷氨鏄, 瀹冨厑璁告寚閽堝彉閲忓甫涓嬫爣, 濡?SPAN lang=EN-US>p[i]涓?SPAN lang=EN-US>*(p+i)絳変環銆?SPAN lang=EN-US> 鍋囪嫢: p=a+5; 鍒?SPAN lang=EN-US>p[2]灝辯浉褰撲簬*(p+2), 鐢變簬p 鎸囧悜a[5], 鎵浠?SPAN lang=EN-US>p[2]灝辯浉褰撲簬a[7] 銆傝?SPAN lang=EN-US>p[-3]灝辯浉褰撲簬*(p-3), 瀹冭〃紺?SPAN lang=EN-US>a[2]銆?SPAN lang=EN-US> 浜屻佹寚鍚戜簩緇存暟緇勭殑鎸囬拡 1. 浜岀淮鏁扮粍鍏冪礌鐨勫湴鍧 涓轟簡璇存槑闂, 鎴戜滑瀹氫箟浠ヤ笅浜岀淮鏁扮粍: int a[3][4]={{0,1,2,3}, {4,5,6,7}, {8,9,10,11}}; a 涓轟簩緇存暟緇勫悕, 姝ゆ暟緇勬湁3 琛?SPAN lang=EN-US>4鍒?SPAN lang=EN-US>, 鍏?SPAN lang=EN-US>12涓厓绱犮備絾涔熷彲榪欐牱鏉ョ悊瑙?SPAN lang=EN-US>,鏁扮粍a 鐢變笁涓厓绱犵粍鎴?SPAN lang=EN-US>:a[0],a[1],a[2]銆傝屾瘡涓厓绱犲張鏄竴涓竴緇存暟緇?SPAN lang=EN-US>, 涓旈兘鍚湁4 涓厓绱?SPAN lang=EN-US>(鐩稿綋浜?SPAN lang=EN-US>4鍒?SPAN lang=EN-US>),渚嬪,a[0] 鎵浠h〃鐨勪竴緇存暟緇勬墍鍖呭惈鐨?SPAN lang=EN-US> 4 涓厓绱犱負a[0][0], a[0][1], a[0][2], a[0][3] 銆傚鍥炬墍紺?SPAN lang=EN-US>: ______ _______________ a---| a[0] | ____ | 0 | 1 | 2 | 3 | |______| |___|___|___|___| | a[1] | ____ | 4 | 5 | 6 | 7 | |______| |___|___|___|___| | a[2] | ____ | 8 | 9 | 10| 11| |______| |___|___|___|___| 浣嗕粠浜岀淮鏁扮粍鐨勮搴︽潵鐪?SPAN lang=EN-US>,a浠h〃浜岀淮鏁扮粍鐨勯鍦板潃, 褰撶劧涔熷彲鐪嬫垚鏄簩緇存暟緇勭0 琛岀殑棣栧湴鍧銆?SPAN lang=EN-US>a+1灝變唬琛ㄧ1 琛岀殑棣栧湴鍧,a+2 灝變唬琛ㄧ2 琛岀殑棣栧湴鍧銆傚鏋滄浜岀淮鏁扮粍鐨勯鍦板潃涓?SPAN lang=EN-US>1000,鐢變簬絎?SPAN lang=EN-US>0琛屾湁4 涓暣鍨嬪厓绱?SPAN lang=EN-US>,鎵浠?SPAN lang=EN-US>a+1涓?SPAN lang=EN-US>1008,a+2涔熷氨涓?SPAN lang=EN-US>1016銆傚鍥炬墍紺?SPAN lang=EN-US> _______________ (1000) ____ | 0 | 1 | 2 | 3 | |___|___|___|___| (1008) ____ | 4 | 5 | 6 | 7 | |___|___|___|___| (1016) ____ | 8 | 9 | 10| 11| |___|___|___|___| 鏃㈢劧鎴戜滑鎶?SPAN lang=EN-US>a[0],a[1],a[2]鐪嬫垚鏄竴緇存暟緇勫悕, 鍙互璁や負瀹冧滑鍒嗗埆浠h〃瀹冧滑鎵瀵瑰簲鐨勬暟緇勭殑棣栧湴鍧, 涔熷氨鏄,a[0] 浠h〃絎?SPAN lang=EN-US> 0 琛屼腑絎?SPAN lang=EN-US> 0 鍒楀厓绱犵殑鍦板潃, 鍗?SPAN lang=EN-US>&a[0][0], a[1]鏄1 琛屼腑絎?SPAN lang=EN-US>0鍒楀厓绱犵殑鍦板潃, 鍗?SPAN lang=EN-US>&a[1][0],鏍規嵁鍦板潃榪愮畻瑙勫垯,a[0]+1 鍗充唬琛ㄧ0 琛岀1 鍒楀厓绱犵殑鍦板潃, 鍗?SPAN lang=EN-US>&a[0][1],涓鑸岃█,a[i]+j 鍗充唬琛ㄧi 琛岀j 鍒楀厓绱犵殑鍦板潃, 鍗?SPAN lang=EN-US>&a[i][j]銆?SPAN lang=EN-US> 鍙﹀, 鍦ㄤ簩緇存暟緇勪腑, 鎴戜滑榪樺彲鐢ㄦ寚閽堢殑褰㈠紡鏉ヨ〃紺哄悇鍏冪礌鐨勫湴鍧銆傚鍓嶆墍榪?SPAN lang=EN-US>,a[0]涓?SPAN lang=EN-US>*(a+0)絳変環,a[1] 涓?SPAN lang=EN-US>*(a+1)絳変環, 鍥犳a[i]+j 灝變笌*(a+i)+j 絳変環, 瀹冭〃紺烘暟緇勫厓绱?SPAN lang=EN-US>a[i][j]鐨勫湴鍧銆?SPAN lang=EN-US> 鍥犳, 浜岀淮鏁扮粍鍏冪礌a[i][j] 鍙〃紺烘垚*(a[i]+j) 鎴?SPAN lang=EN-US>*(*(a+i)+j),瀹冧滑閮戒笌a[i][j] 絳変環, 鎴栬呰繕鍙啓鎴?SPAN lang=EN-US>(*(a+i))[j]銆?SPAN lang=EN-US> 鍙﹀, 瑕佽ˉ鍏呰鏄庝竴涓?SPAN lang=EN-US>, 鏋滀綘緙栧啓涓涓▼搴忚緭鍑烘墦鍗?SPAN lang=EN-US>a鍜?SPAN lang=EN-US>*a,浣犲彲鍙戠幇瀹冧滑鐨勫兼槸鐩稿悓鐨?SPAN lang=EN-US>,榪欐槸涓轟粈涔堝憿? 鎴戜滑鍙繖鏍鋒潵鐞嗚В: 棣栧厛, 涓轟簡璇存槑闂, 鎴戜滑鎶婁簩緇存暟緇勪漢涓哄湴鐪嬫垚鐢變笁涓暟緇勫厓绱?SPAN lang=EN-US>a[0],a[1],a[2]緇勬垚, 灝?SPAN lang=EN-US>a[0],a[1],a[2]鐪嬫垚鏄暟緇勫悕瀹冧滑鍙堝垎鍒槸鐢?SPAN lang=EN-US>4涓厓绱犵粍鎴愮殑涓緇存暟緇勩傚洜姝?SPAN lang=EN-US>,a琛ㄧず鏁扮粍絎?SPAN lang=EN-US>0琛岀殑鍦板潃, 鑰?SPAN lang=EN-US>*a鍗充負a[0], 瀹冩槸鏁扮粍鍚?SPAN lang=EN-US>, 褰撶劧榪樻槸鍦板潃, 瀹冨氨鏄暟緇勭0 琛岀0 鍒楀厓绱犵殑鍦板潃銆?SPAN lang=EN-US> 2.鎸囧悜涓涓敱n 涓厓绱犳墍緇勬垚鐨勬暟緇勬寚閽?SPAN lang=EN-US> 鍦?SPAN lang=EN-US>Turbo C涓?SPAN lang=EN-US>, 鍙畾涔夊涓嬬殑鎸囬拡鍙橀噺: int (*p)[3]; 鎸囬拡p 涓烘寚鍚戜竴涓敱3 涓厓绱犳墍緇勬垚鐨勬暣鍨嬫暟緇勬寚閽堛傚湪瀹氫箟涓?SPAN lang=EN-US>,鍦嗘嫭鍙鋒槸涓嶈兘灝戠殑, 鍚﹀垯瀹冩槸鎸囬拡鏁扮粍, 榪欏皢鍦ㄥ悗闈粙緇嶃傝繖縐嶆暟緇勭殑鎸囬拡涓嶅悓浜庡墠闈粙緇嶇殑鏁村瀷鎸囬拡, 褰撴暣鍨嬫寚閽堟寚鍚戜竴涓暣鍨嬫暟緇勭殑鍏冪礌鏃?SPAN lang=EN-US>,榪涜鎸囬拡( 鍦板潃) 鍔?SPAN lang=EN-US>1榪愮畻, 琛ㄧず鎸囧悜鏁扮粍鐨勪笅涓涓厓绱?SPAN lang=EN-US>,姝ゆ椂鍦板潃鍊煎鍔犱簡2( 鍥犱負鏀懼ぇ鍥犲瓙涓?SPAN lang=EN-US>2),鑰屽涓婃墍瀹氫箟鐨勬寚鍚戜竴涓敱3 涓厓绱犵粍鎴愮殑鏁扮粍鎸囬拡, 榪涜鍦板潃鍔?SPAN lang=EN-US>1榪愮畻鏃?SPAN lang=EN-US>,鍏跺湴鍧鍊煎鍔犱簡6( 鏀懼ぇ鍥犲瓙涓?SPAN lang=EN-US>2x3=6), 榪欑鏁扮粍鎸囬拡鍦?SPAN lang=EN-US>Turbo C涓敤寰楄緝灝?SPAN lang=EN-US>,浣嗗湪澶勭悊浜岀淮鏁扮粍鏃?SPAN lang=EN-US>, 榪樻槸寰堟柟渚跨殑銆備緥濡?SPAN lang=EN-US>: int a[3][4], (*p)[4]; p=a; 寮濮嬫椂p 鎸囧悜浜岀淮鏁扮粍絎?SPAN lang=EN-US>0琛?SPAN lang=EN-US>,褰撹繘琛?SPAN lang=EN-US>p+1榪愮畻鏃?SPAN lang=EN-US>,鏍規嵁鍦板潃榪愮畻瑙勫垯, 姝ゆ椂鏀懼ぇ鍥犲瓙涓?SPAN lang=EN-US>4x2=8,鎵浠ユ鏃舵濂芥寚鍚戜簩緇存暟緇勭殑絎?SPAN lang=EN-US>1琛屻傚拰浜岀淮鏁扮粍鍏冪礌鍦板潃璁$畻鐨勮鍒欎竴鏍?SPAN lang=EN-US>,*p+1鎸囧悜a[0][1],*(p+i)+j 鍒欐寚鍚戞暟緇勫厓绱?SPAN lang=EN-US>a[i][j]銆?SPAN lang=EN-US> 渚嬶細 int a[3][4]={ {1,3,5,7}, {9,11,13,15}, {17,19,21,23} }; main() { int i,(*b)[4]; b=a+1; /* b 鎸囧悜浜岀淮鏁扮粍鐨勭1 琛?SPAN lang=EN-US>, 姝ゆ椂*b[0] 鏄?SPAN lang=EN-US>a[1][0] */ for(i=1;i<=4;b=b[0]+2,i++) /* 淇敼b 鐨勬寚鍚?SPAN lang=EN-US>, 姣忔澧炲姞2 */ printf("%d\t",*b[0]); printf("\n"); for(i=0; i<3; i++) { b=a+i; /* 淇敼b 鐨勬寚鍚?SPAN lang=EN-US>,姣忔璺寵繃浜岀淮鏁扮粍鐨勪竴琛?SPAN lang=EN-US> */ printf("%d\t",*(b[i]+1)); } printf ("\n"); } 紼嬪簭榪愯緇撴灉濡備笅: 9 13 17 21 3 11 19 涓夈佸瓧絎︽寚閽?SPAN lang=EN-US> 鎴戜滑宸茬粡鐭ラ亾, 瀛楃涓插父閲忔槸鐢卞弻寮曞彿鎷搗鏉ョ殑瀛楃搴忓垪, 渚嬪: "a string" 灝辨槸涓涓瓧絎︿覆甯擱噺, 璇ュ瓧絎︿覆涓洜涓哄瓧絎?SPAN lang=EN-US>a鍚庨潰榪樻湁涓涓┖鏍煎瓧絎?SPAN lang=EN-US>,鎵浠ュ畠鐢?SPAN lang=EN-US>8涓瓧絎﹀簭鍒楃粍鎴愩傚湪紼嬪簭涓鍑虹幇瀛楃涓插父閲?SPAN lang=EN-US>C緙栬瘧紼嬪簭灝辯粰瀛楃涓插父閲忔寜鎺掍竴瀛樿串鍖哄煙, 榪欎釜鍖哄煙鏄潤鎬佺殑, 鍦ㄦ暣涓▼搴忚繍琛岀殑榪囩▼涓緇堝崰鐢?SPAN lang=EN-US>, 騫蟲椂鎵璁茬殑瀛楃涓插父閲忕殑闀垮害鏄寚璇ュ瓧絎︿覆鐨勫瓧絎︿釜鏁?SPAN lang=EN-US>, 浣嗗湪鎸夋帓瀛樿串鍖哄煙鏃?SPAN lang=EN-US>, C 緙栬瘧紼嬪簭榪樿嚜鍔ㄧ粰璇ュ瓧絎︿覆搴忓垪鐨勬湯灝懼姞涓婁竴涓┖瀛楃'\0', 鐢ㄦ潵鏍囧織瀛楃涓茬殑緇撴潫, 鍥犳涓涓瓧絎︿覆甯擱噺鎵鍗犵殑瀛樿串鍖哄煙鐨勫瓧鑺傛暟鎬繪瘮瀹冪殑瀛楃涓暟澶氫竴涓瓧鑺傘?SPAN lang=EN-US> Turbo C涓搷浣滀竴涓瓧絎︿覆甯擱噺鐨勬柟娉曟湁: (1). 鎶婂瓧絎︿覆甯擱噺瀛樻斁鍦ㄤ竴涓瓧絎︽暟緇勪箣涓?SPAN lang=EN-US>, 渚嬪: char s[]="a string"; 鏁扮粍s 鍏辨湁9 涓厓绱犳墍緇勬垚, 鍏朵腑s[8] 涓殑鍐呭鏄?SPAN lang=EN-US>'\0'銆傚疄闄呬笂, 鍦ㄥ瓧絎︽暟緇勫畾涔夌殑榪囩▼涓?SPAN lang=EN-US>,緙栬瘧紼嬪簭鐩存帴鎶婂瓧絎︿覆澶嶅啓鍒版暟緇勪腑, 鍗沖鏁扮粍s 鍒濆鍖栥?SPAN lang=EN-US> (2).鐢ㄥ瓧絎︽寚閽堟寚鍚戝瓧絎︿覆, 鐒跺悗閫氳繃瀛楃鎸囬拡鏉ヨ闂瓧絎︿覆瀛樿串鍖哄煙銆傚綋瀛楃涓插父閲忓湪琛ㄨ揪寮忎腑鍑虹幇鏃?SPAN lang=EN-US>, 鏍規嵁鏁扮粍鐨勭被鍨嬭漿鎹㈣鍒?SPAN lang=EN-US>,瀹冭杞崲鎴愬瓧絎︽寚閽堛傚洜姝?SPAN lang=EN-US>,鑻ユ垜浠畾涔変簡涓瀛楃鎸囬拡cp: char *cp; 浜庢槸鍙敤: cp="a string"; 浣?SPAN lang=EN-US>cp鎸囧悜瀛楃涓插父閲忎腑鐨勭0 鍙峰瓧絎?SPAN lang=EN-US>a, 濡傚浘鎵紺恒?SPAN lang=EN-US> ___________________________________ CP ----- | a | | s | t | r | i | n | g | \0| |___|___|___|___|___|___|___|___|___| 浠ュ悗鎴戜滑鍙氳繃cp 鏉ヨ闂繖涓瀛樿串鍖哄煙, 濡?SPAN lang=EN-US>*cp鎴?SPAN lang=EN-US>cp[0]灝辨槸瀛楃a, 鑰?SPAN lang=EN-US>cp[i]鎴?SPAN lang=EN-US>*(cp+i)灝辯浉褰撲簬瀛楃涓茬殑絎?SPAN lang=EN-US>i鍙峰瓧絎?SPAN lang=EN-US>,浣嗕紒鍥鵑氳繃鎸囬拡鏉ヤ慨鏀瑰瓧絎︿覆甯擱噺鐨勮涓烘槸娌℃湁鎰忎箟鐨勩?SPAN lang=EN-US> 鍥涖佹寚閽堟暟緇?SPAN lang=EN-US> 鍥犱負鎸囬拡鏄彉閲?SPAN lang=EN-US>,鍥犳鍙鎯崇敤鎸囧悜鍚屼竴鏁版嵁綾誨瀷鐨勬寚閽堟潵鏋勬垚涓涓暟緇?SPAN lang=EN-US>, 榪欏氨鏄寚閽堟暟緇勩傛暟緇勪腑鐨勬瘡涓厓绱犻兘鏄寚閽堝彉閲?SPAN lang=EN-US>,鏍規嵁鏁扮粍鐨勫畾涔?SPAN lang=EN-US>,鎸囬拡鏁扮粍涓瘡涓厓绱犻兘涓烘寚鍚戝悓涓鏁版嵁綾誨瀷鐨勬寚閽堛傛寚閽堟暟緇勭殑瀹氫箟鏍煎紡涓?SPAN lang=EN-US>: 綾誨瀷鏍囪瘑 * 鏁扮粍鍚?SPAN lang=EN-US>[鏁村瀷甯擱噺琛ㄨ揪寮?SPAN lang=EN-US>]; 渚嬪: int *a[10]; 瀹氫箟浜嗕竴涓寚閽堟暟緇?SPAN lang=EN-US>,鏁扮粍涓殑姣忎釜鍏冪礌閮芥槸鎸囧悜鏁村瀷閲忕殑鎸囬拡, 璇ユ暟緇勭敱10 涓厓绱犵粍鎴?SPAN lang=EN-US>,鍗?SPAN lang=EN-US>a[0],a[1],a[2], ..., a[9],瀹冧滑鍧囦負鎸囬拡鍙橀噺銆?SPAN lang=EN-US>a涓鴻鎸囬拡鏁扮粍鍚?SPAN lang=EN-US>,鍜屾暟緇勪竴鏍鳳紝a 鏄父閲?SPAN lang=EN-US>,涓嶈兘瀵瑰畠榪涜澧為噺榪愮畻銆?SPAN lang=EN-US>a涓烘寚閽堟暟緇勫厓绱?SPAN lang=EN-US>a[0]鐨勫湴鍧,a+i 涓?SPAN lang=EN-US>a[i]鐨勫湴鍧,*a 灝辨槸a[0],*(a+i) 灝辨槸a[i] 銆?SPAN lang=EN-US> 涓轟粈涔堣瀹氫箟鍜屼嬌鐢ㄦ寚閽堟暟緇勫憿? 涓昏鏄敱浜庢寚閽堟暟緇勫澶勭悊瀛楃涓叉彁渚涗簡鏇村ぇ鐨勬柟渚垮拰鐏墊椿, 浣跨敤浜岀淮鏁扮粍瀵瑰鐞嗛暱搴︿笉絳夌殑姝f枃鏁堢巼浣庯紝鑰屾寚閽堟暟緇勭敱浜庡叾涓瘡涓厓绱犻兘涓烘寚閽堝彉閲?SPAN lang=EN-US>,鍥犳閫氳繃鍦板潃榪愮畻鏉ユ搷浣滄鏂囪鏄崄鍒嗘柟渚跨殑銆?SPAN lang=EN-US> 鎸囬拡鏁扮粍鍜屼竴鑸暟緇勪竴鏍?SPAN lang=EN-US>,鍏佽鎸囬拡鏁扮粍鍦ㄥ畾涔夋椂鍒濆鍖栵紝浣嗙敱浜庢寚閽堟暟緇勭殑姣忎釜鍏冪礌鏄寚閽堝彉閲?SPAN lang=EN-US>,瀹冨彧鑳藉瓨鏀懼湴鍧, 鎵浠ュ鎸囧悜瀛楃涓茬殑鎸囬拡鏁扮粍鍦ㄨ鏄庤祴鍒濆兼椂, 鏄妸瀛樻斁瀛楃涓茬殑棣栧湴鍧璧嬬粰鎸囬拡鏁扮粍鐨勫搴斿厓绱?SPAN lang=EN-US>, 渚嬪涓嬮潰鏄竴涓功鍐欏嚱鏁?SPAN lang=EN-US>month_name(n),鍑芥暟榪斿洖涓涓寚鍚戝寘鍚n 鏈堝悕瀛楃殑瀛楃鎸囬拡( 鍏充簬鍑芥暟鎸囬拡鍜屾寚閽堝嚱鏁?SPAN lang=EN-US>,涓嬩竴鑺傚皢涓撻棬浠嬬粛) 銆?SPAN lang=EN-US> 渚?SPAN lang=EN-US>: 鎵撳嵃1 鏈堣嚦12 鏈堢殑鏈堝悕: char *month_name(int n) { static char *name[]={ "Illegal month", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; return((n<1||n>12)?name[0]:name[n]); } main() { int i; for(i=0; i<13; i++) printf("%s\n", month_name(i)); }瀵逛簬鎸囬拡榪欎竴鑺傦紝涓瀹氳澶氱粌涔犱竴浜涢銆傛寚閽堟槸涓涓緢閲嶈鐨勬蹇碉紝蹇呴』澶氭帴瑙﹀疄闄呯殑闂鎵嶈兘鎺屾彙瀹冦?/SPAN> ]]> 鎬庝箞鍒ゆ柇_variant_t鐨勫兼槸浠涔堢被鍨?/title> http://m.shnenglu.com/ivenher/articles/775.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 21 Oct 2005 06:42:00 GMT http://m.shnenglu.com/ivenher/articles/775.html http://m.shnenglu.com/ivenher/comments/775.html http://m.shnenglu.com/ivenher/articles/775.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/775.html http://m.shnenglu.com/ivenher/services/trackbacks/775.html 灝?_variant_t 綾誨瀷鐨勫彉閲忥紝杞崲鎴愬瓧絎︿覆錛堟瘮濡傚鏋滄槸鏁板瓧錛屽垯杞崲鎴愭暟瀛楀搴旂殑瀛楃涓?錛氬 10.2 -> "10.200000"錛?BR> */ _variant_t var; CString str; //杞崲浠ュ悗鐨勫瓧絎︿覆 //浠ヤ笅浠g爜婕旂ず濡備綍杞崲涓篊鏍囧噯瀛楃涓插瀷 if (var.vt == VT_I4) { long lNum; char szCh[21]; str=var.bstrVal; WideCharToMultiByte (CP_ACP, 0, var.bstrVal, -1, szCh, sizeof(szCh), NULL, NULL); } //浠ヤ笅浠g爜婕旂ず濡備綍杞崲鎴愰昏緫鍨?BR>if( var.vt == VT_BOOL) { BOOL bVar; lNum=var.lVal; bVar= var.boolVar==0? FALSE : TRUE; } //浠ヤ笅浠g爜婕旂ず涓哄叾浣欑被鍨嬶紙琛ュ厖錛?BR>switch(var.vt) { case VT_BSTR: //var is BSTR type str=var.bstrVal; break; case VT_I2: //var is short int type str.Format("%d",(int)var.iVal); break; case VT_I4: //var is long int type str.Format("%d",var.lVal); break; case VT_R4: //var is float type str.Format("%10.6f",(double)var.fltVal); break; case VT_R8: //var is double type str.Format("%10.6f",var.dblVal); break; case VT_CY: //var is CY type str=COleCurrency(var).Format(); break; case VT_DATE: //var is DATE type str=COleDateTime(var).Format(); break; case VT_BOOL: //var is VARIANT_BOOL str= (var.boolVal==0) ?"FALSE": "TRUE"; break; default: str.Format("Unk type %d\n",var.vt); TRACE("Unknown type %d\n",var.vt); } ]]> C++瀛楃涓插畬鍏ㄦ寚寮曚箣涓 鈥斺?Win32 瀛楃緙栫爜錛堣漿錛?/title> http://m.shnenglu.com/ivenher/articles/773.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 21 Oct 2005 06:27:00 GMT http://m.shnenglu.com/ivenher/articles/773.html http://m.shnenglu.com/ivenher/comments/773.html http://m.shnenglu.com/ivenher/articles/773.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/773.html http://m.shnenglu.com/ivenher/services/trackbacks/773.html
C++瀛楃涓插畬鍏ㄦ寚寮曚箣涓 鈥斺?Win32 瀛楃緙栫爜 鍘熻憲錛歁ichael Dunn 緲昏瘧錛?A href="mailto:cjsun@insun.hit.edu.cn">Chengjie Sun
鍘熸枃鍑哄錛?FONT color=#4a664d 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
瀛楃鍦ㄥ唴瀛樹腑鏄庢牱瀛樺偍鐨?/B> 銆銆鍗曞瓧鑺傚瓧絎︿覆錛氭瘡涓瓧絎﹀崰涓涓瓧鑺傛寜欏哄簭渚濇瀛樺偍錛屾渶鍚庝互鍗曞瓧鑺傝〃紺虹殑0緇撴潫銆備緥濡傘?Bob"鐨勫瓨璐艦寮忓涓嬶細
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> 浣跨敤瀛楃涓插鐞嗗嚱鏁?/B> 銆銆鎴戜滑閮藉凡緇忚榪嘋璇█涓殑瀛楃涓插嚱鏁幫紝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‘鐨勯亶鍘嗗拰绱㈠紩瀛楃涓?/B> 銆銆鍥犱負鎴戜滑涓ぇ澶氭暟浜洪兘鏄敤鐫SBCS瀛楃涓叉垚闀跨殑錛屾墍浠ユ垜浠湪閬嶅巻瀛楃涓叉椂錛屽父甯鎬嬌鐢ㄦ寚閽堢殑++-鍜?鎿嶄綔銆傛垜浠篃浣跨敤鏁扮粍涓嬫爣鐨勮〃紺哄艦寮忔潵鎿嶄綔瀛楃涓蹭腑鐨勫瓧絎︺傝繖涓ょ鏂瑰紡鏄敤浜嶴BCS鍜孶nicode瀛楃涓詫紝鍥犱負瀹冧滑涓殑瀛楃鏈夌潃鐩稿悓鐨勫搴︼紝緙栬瘧鍣ㄨ兘姝g‘鐨勮繑鍥炴垜浠渶瑕佺殑瀛楃銆?BR>銆銆鐒惰岋紝褰撶鍒癉BCS瀛楃涓叉椂錛屾垜浠繀欏繪姏寮冭繖浜涗範鎯傝繖閲屾湁浣跨敤鎸囬拡閬嶅巻DBCS瀛楃涓叉椂鐨勪袱鏉¤鍒欍傝繚鑳屼簡榪欎袱鏉¤鍒欙紝浣犵殑紼嬪簭灝變細瀛樺湪DBCS鏈夊叧鐨刡ugs銆?/P>
1錛庡湪鍓嶅悜閬嶅巻鏃訛紝涓嶈浣跨敤++鎿嶄綔錛岄櫎闈炰綘姣忔閮芥鏌ead byte錛?
2錛庢案榪滀笉瑕佷嬌鐢?鎿嶄綔榪涜鍚庡悜閬嶅巻銆?
銆銆鎴戜滑鍏堟潵闃愯堪瑙勫垯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, '''' );
// 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, '''' );
// 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***()鐨勫尯鍒?/B> 銆銆鐜板湪錛屾垜浠簲璇ュ緢娓呮涓轟粈涔坃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>
1錛庝綘鐨勭▼搴忓彧榪愯鍦╓indows NT緋葷粺涓?
2錛?浣犵殑紼嬪簭闇瑕佸鐞嗚秴榪嘙AX_PATH涓瓧絎﹂暱鐨勬枃浠跺悕銆?
3錛?浣犵殑紼嬪簭闇瑕佷嬌鐢╔P涓紩鍏ョ殑鍙湁Unicode鐗堟湰鐨凙PI.
銆銆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>
浣滆呯畝浠?/B> 銆銆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>
鐩稿叧鏂囩珷
]]> C++瀛楃涓插畬鍏ㄦ寚寮曚箣浜?鈥斺?瀛楃涓插皝瑁呯被錛堣漿錛?/title> http://m.shnenglu.com/ivenher/articles/772.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 21 Oct 2005 06:25:00 GMT http://m.shnenglu.com/ivenher/articles/772.html http://m.shnenglu.com/ivenher/comments/772.html http://m.shnenglu.com/ivenher/articles/772.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/772.html http://m.shnenglu.com/ivenher/services/trackbacks/772.html
C++瀛楃涓插畬鍏ㄦ寚寮曚箣浜?鈥斺?瀛楃涓插皝瑁呯被 鍘熻憲錛歁ichael Dunn 浣滆咃細Chengjie Sun
鍘熸枃鍑哄錛?A target=_blank>CodeProject錛歍he Complete Guide to C++ Strings, Part II 寮曡█ 銆銆鍥犱負C璇█椋庢牸鐨勫瓧絎︿覆瀹規槗鍑洪敊涓斾笉鏄撶鐞嗭紝榛戝浠敋鑷沖埄鐢ㄥ彲鑳藉瓨鍦ㄧ殑緙撳啿鍖烘孩鍑篵ug鎶奀璇█椋庢牸鐨勫瓧絎︿覆浣滀負鏀誨嚮鐩爣錛屾墍浠ュ嚭鐜頒簡寰堝瀛楃涓插皝瑁呯被銆備笉騫哥殑鏄紝鍦ㄦ煇浜涘満鍚堜笅鎴戜滑涓嶇煡閬撹浣跨敤鍝釜瀛楃涓茬被錛屼篃涓嶇煡閬撴庢牱鎶婁竴涓狢椋庢牸鐨勫瓧絎︿覆杞崲鎴愪竴涓瓧絎︿覆灝佽綾匯?BR>銆銆榪欑瘒鏂囩珷灝嗕粙緇嶆墍鏈夊湪Win32 API, MFC, STL, WTL 鍜?Visual C++ 榪愯搴撲腑鍑虹幇鐨勫瓧絎︿覆綾誨瀷銆傛垜灝嗘弿榪版瘡涓涓被鐨勭敤娉曪紝鍛婅瘔澶у鎬庢牱鍒涘緩姣忎竴涓被鐨勫璞′互鍙婃庢牱鎶婁竴涓被杞崲鎴愬叾浠栫被銆傚彈鎺у瓧絎︿覆鍜孷isual C++ 7涓殑綾諱袱閮ㄥ垎鏄疦ish瀹屾垚鐨勩?BR>銆銆涓轟簡鏇村ソ鐨勪粠榪欑瘒鏂囩珷涓彈鐩婏紝浣犲繀欏昏鏄庣櫧涓嶅悓鐨勫瓧絎︾被鍨嬪拰緙栫爜錛岃繖浜涘唴瀹規垜鍦?FONT color=#4a664d>絎竴閮ㄥ垎涓粙緇嶈繃銆?/P>
Rule #1 of string classes
銆銆浣跨敤cast鏉ュ疄鐜扮被鍨嬭漿鎹㈡槸涓嶅ソ鐨勫仛娉曪紝闄ら潪鏈夋枃妗f槑紜寚鍑鴻繖縐嶈漿鎹㈠彲浠ヤ嬌鐢ㄣ?BR>淇冧嬌鎴戝啓榪欎袱綃囨枃绔犵殑鍘熷洜鏄瓧絎︿覆綾誨瀷杞崲涓粡甯擱亣鍒扮殑涓浜涢棶棰樸傚綋鎴戜滑浣跨敤cast鎶婂瓧絎︿覆浠庣被鍨媂杞崲鍒扮被鍨媄鐨勬椂鍊欙紝鎴戜滑涓嶇煡閬撲負浠涔堜唬鐮佷笉鑳芥甯稿伐浣溿傚悇縐嶅悇鏍風殑瀛楃涓茬被鍨嬶紝灝ゅ叾鏄疊STR錛屽嚑涔庢病鏈夊湪浠諱綍涓涓湴鏂圭殑鏂囨。涓鏄庣‘鐨勬寚鍑哄彲浠ョ敤cast鏉ュ疄鐜扮被鍨嬭漿鎹€傛墍浠ユ垜鎯充竴浜涗漢鍙兘浼氫嬌鐢╟ast鏉ュ疄鐜扮被鍨嬭漿鎹㈠茍甯屾湜榪欑杞崲鑳藉姝e父宸ヤ綔銆?BR>銆銆闄ら潪婧愬瓧絎︿覆鏄竴涓鏄庣‘鎸囨槑鏀寔杞崲鎿嶄綔絎︾殑瀛楃涓插寘瑁呯被錛屽惁鍒檆ast涓嶅瀛楃涓插仛浠諱綍杞崲銆傚甯擱噺瀛楃涓蹭嬌鐢╟ast涓嶄細璧峰埌浠諱綍浣滅敤錛屾墍浠ヤ笅闈㈢殑浠g爜錛?
void SomeFunc ( LPCWSTR widestr );
main()
{
SomeFunc ( (LPCWSTR) "C:\\foo.txt" ); // WRONG!
} 銆銆鑲畾浼氬け璐ャ傚畠鍙互琚紪璇戯紝鍥犱負cast鎿嶄綔浼氭挙娑堢紪璇戝櫒鐨勭被鍨嬫鏌ャ備絾鏄紝緙栬瘧鍙互閫氳繃騫朵笉鑳借鏄庝唬鐮佹槸姝g‘鐨勩?BR>銆銆鍦ㄤ笅闈㈢殑渚嬪瓙涓紝鎴戝皢浼氭寚鏄巆ast鍦ㄤ粈涔堟椂鍊欎嬌鐢ㄦ槸鍚堟硶鐨勩?PRE>C-style strings and typedefs
銆銆姝e鎴戝湪絎竴閮ㄥ垎涓彁鍒扮殑錛寃indows APIs 鏄敤TCHARs鏉ュ畾涔夌殑錛屽湪緙栬瘧鏃訛紝瀹冨彲浠ユ牴鎹綘鏄惁瀹氫箟_MBCS鎴栬卂UNICODE琚紪璇戞垚MBCS鎴栬匲nicode瀛楃銆備綘鍙互鍙傜湅絎竴閮ㄥ垎涓TCHAR鐨勫畬鏁存弿榪幫紝榪欓噷涓轟簡鏂逛究錛屾垜鍒楀嚭浜嗗瓧絎︾殑typedefs
Type
Meaning
WCHAR
Unicode character (wchar_t)
TCHAR
MBCS or Unicode character, depending on preprocessor settings
LPSTR
string of char (char*)
LPCSTR
constant string of char (const char*)
LPWSTR
string of WCHAR (WCHAR*)
LPCWSTR
constant string of WCHAR (const WCHAR*)
LPTSTR
string of TCHAR (TCHAR*)
LPCTSTR
constant string of TCHAR (const TCHAR*)
銆銆涓涓鍔犵殑瀛楃綾誨瀷鏄疧LETYPE銆傚畠琛ㄧず鑷姩鍖栨帴鍙o紙濡倃ord鎻愪緵鐨勫彲浠ヤ嬌浣犳搷浣滄枃妗g殑鎺ュ彛錛変腑浣跨敤鐨勫瓧絎︾被鍨嬨傝繖縐嶇被鍨嬩竴鑸瀹氫箟鎴恮char_t錛岀劧鑰屽鏋滀綘瀹氫箟浜哋LE2ANSI棰勫鐞嗘爣璁幫紝OLECHAR灝嗕細琚畾涔夋垚char綾誨瀷銆傛垜鐭ラ亾鐜板湪宸茬粡娌℃湁鐞嗙敱瀹氫箟OLE2ANSI錛堜粠MFC3浠ュ悗錛屽井杞凡緇忎笉浣跨敤瀹冧簡錛夛紝鎵浠ヤ粠鐜板湪璧鋒垜灝嗘妸OLECHAR褰撲綔Unicode瀛楃銆?BR>榪欓噷緇欏嚭浣犲皢浼氱湅鍒扮殑涓浜汷LECHAR鐩稿叧鐨則ypedefs錛?/P>
Type
Meaning
OLECHAR
Unicode character (wchar_t)
LPOLESTR
string of OLECHAR (OLECHAR*)
LPCOLESTR
constant string of OLECHAR (const OLECHAR*)
銆銆榪樻湁涓や釜鐢ㄤ簬鍖呭洿瀛楃涓插拰瀛楃甯擱噺鐨勫畯瀹氫箟錛屽畠浠彲浠ヤ嬌鍚屾牱鐨勪唬鐮佽鐢ㄤ簬MBCS鍜孶nicode builds 錛?/P>
Type
Meaning
_T(x)
Prepends L to the literal in Unicode builds.
OLESTR(x)
Prepends L to the literal to make it an LPCOLESTR.
銆銆鍦ㄦ枃妗f垨渚嬬▼涓紝浣犺繕浼氱湅鍒板ソ澶歘T鐨勫彉浣撱傛湁鍥涗釜絳変環鐨勫畯瀹氫箟錛屽畠浠槸TEXT, _TEXT, __TEXT鍜宊_T錛屽畠浠兘璧峰悓鏍風殑鍋氱敤銆?BR> COM 涓殑瀛楃涓?鈥斺?BSTR 鍜?VARIANT 銆銆寰堝鑷姩鍖栧拰COM鎺ュ彛浣跨敤BSTR鏉ュ畾涔夊瓧絎︿覆銆侭STRs涓湁鍑犱釜"闄烽槺"錛屾墍浠ヨ繖閲屾垜鐢ㄥ崟鐙殑閮ㄥ垎鏉ヨ鏄庡畠銆?BR>銆銆BSTR 鏄?Pascal-style 瀛楃涓詫紙瀛楃涓查暱搴﹁鏄庣‘鎸囧嚭錛夊拰C-style瀛楃涓詫紙瀛楃涓茬殑闀垮害瑕侀氳繃瀵繪壘緇撴潫絎︽潵璁$畻錛夌殑娣峰悎浜х墿銆備竴涓狟STR鏄竴涓猆nicode瀛楃涓詫紝瀹冪殑闀垮害鏄鍏堣冭檻鐨勶紝騫朵笖瀹冭繕鏈変竴涓?瀛楃浣滀負緇撴潫鏍囪銆備笅闈㈡槸涓涓狟STR鐨勭ず渚嬶細 銆
06 00 00 00
42 00
6F 00
62 00
00 00
--length--
B
o
b
EOS
銆銆娉ㄦ剰瀛楃涓茬殑闀垮害鏄浣曡鍔犲埌瀛楃涓叉暟鎹腑鐨勩傞暱搴︽槸DWORD綾誨瀷鐨勶紝淇濆瓨浜嗗瓧絎︿覆涓寘鍚殑瀛楄妭鏁幫紝浣嗕笉鍖呮嫭緇撴潫鏍囪銆傚湪榪欎釜渚嬪瓙涓紝"Bob"鍖呭惈3涓猆nicode瀛楃錛堜笉鍖呮嫭緇撴潫絎︼級錛屾誨叡6涓瓧鑺傘傚瓧絎︿覆鐨勯暱搴﹁棰勫厛瀛樺偍濂斤紝浠ヤ究褰撲竴涓狟STR鍦ㄨ繘紼嬫垨鑰呰綆楁満涔嬮棿琚紶閫掓椂錛孋OM搴撶煡閬撳灝戞暟鎹渶瑕佷紶閫併傦紙鍙︿竴鏂歸潰錛屼竴涓狟STR鑳藉瀛樺偍浠繪剰鏁版嵁鍧楋紝鑰屼笉浠呬粎鏄瓧絎︼紝瀹冭繕鍙互鍖呭惈宓屽叆鍦ㄦ暟鎹腑鐨?瀛楃銆傜劧鑰岋紝鐢變簬榪欑瘒鏂囩珷鐨勭洰鐨勶紝鎴戝皢涓嶈冭檻閭d簺鎯呭喌錛夈?BR>銆銆鍦?C++ 涓紝涓涓?BSTR 瀹為檯涓婂氨鏄竴涓寚鍚戝瓧絎︿覆涓涓涓瓧絎︾殑鎸囬拡銆傚畠鐨勫畾涔夊涓嬶細
BSTR bstr = NULL;
bstr = SysAllocString ( L"Hi Bob!" );
if ( NULL == bstr )
// out of memory error
// Use bstr here...
SysFreeString ( bstr ); 鑷劧鐨勶紝鍚勭鍚勬牱鐨凚STR灝佽綾諱負浣犲疄鐜板唴瀛樼鐞嗐?BR>銆銆鍙﹀涓涓敤鍦ㄨ嚜鍔ㄥ寲鎺ュ彛涓殑鍙橀噺綾誨瀷鏄疺ARIANT銆傚畠琚敤鏉ュ湪鏃犵被鍨嬶紙typeless錛夎璦錛屽Jscript鍜孷BScript錛屾潵浼犻掓暟鎹備竴涓猇ARIANT鍙兘鍚湁寰堝涓嶅悓綾誨瀷鐨勬暟鎹紝渚嬪long鍜孖Dispatch*銆傚綋涓涓猇ARIANT鍖呭惈涓涓瓧絎︿覆錛屽瓧絎︿覆琚瓨鎴愪竴涓狟STR銆傚綋鎴戝悗闈㈣鍒癡ARIANT灝佽綾繪椂錛屾垜浼氬VARIANT澶氫簺浠嬬粛銆?BR> 瀛楃涓插皝瑁呯被 銆銆鍒扮洰鍓嶄負姝紝鎴戝凡緇忎粙緇嶄簡鍚勭鍚勬牱鐨勫瓧絎︿覆銆備笅闈紝鎴戝皢璇存槑灝佽綾匯傚浜庢瘡涓皝瑁呯被錛屾垜灝嗗睍紺烘庢牱鍒涘緩涓涓璞″強鎬庢牱鎶婂畠杞崲鎴愪竴涓狢璇█椋庢牸鐨勫瓧絎︿覆鎸囬拡銆侰璇█椋庢牸鐨勫瓧絎︿覆鎸囬拡瀵逛簬API鐨勮皟鐢紝鎴栬呭垱寤轟竴涓笉鍚岀殑瀛楃涓茬被瀵硅薄緇忓父鏄繀闇鐨勩傛垜涓嶄細浠嬬粛瀛楃涓茬被鎻愪緵鐨勫叾浠栨搷浣滐紝姣斿鎺掑簭鍜屾瘮杈冦?BR>銆銆閲嶅涓閬嶏紝闄ら潪浣犵‘鍒囩殑鏄庣櫧緇撴灉浠g爜灝嗕細鍋氫粈涔堬紝鍚﹀垯涓嶈鐩茬洰鍦頒嬌鐢╟ast鏉ュ疄鐜扮被鍨嬭漿鎹€?BR> CRT鎻愪緵鐨勭被 _bstr_t 銆銆_bstr_t鏄竴涓BSTR鐨勫畬鏁村皝瑁呯被錛屽疄闄呬笂瀹冮殣钘忎簡搴曞眰鐨凚STR銆傚畠鎻愪緵鍚勭鏋勯犲嚱鏁板拰鎿嶄綔絎︽潵璁塊棶搴曞眰鐨凜璇█椋庢牸鐨勫瓧絎︿覆銆傜劧鑰岋紝_bstr_t鍗存病鏈夎闂瓸STR鏈韓鐨勬搷浣滅錛屾墍浠ヤ竴涓猒bstr_t綾誨瀷鐨勫瓧絎︿覆涓嶈兘琚綔涓鴻緭鍑哄弬鏁頒紶緇欎竴涓狢OM鏂規硶銆傚鏋滀綘闇瑕佷竴涓狟STR*鍙傛暟錛屼嬌鐢ˋTL綾籆ComBSTR鏄瘮杈冨鏄撶殑鏂瑰紡銆?BR>銆銆涓涓猒bstr_t瀛楃涓茶兘澶熶紶緇欎竴涓帴鏀跺弬鏁扮被鍨嬩負BSTR鐨勫嚱鏁幫紝鍙槸鍥犱負涓嬪垪3涓潯浠跺悓鏃舵弧瓚熾傞鍏堬紝_bstr_t鏈変竴涓悜wchar_t*杞崲鐨勮漿鎹㈠嚱鏁幫紱鍏舵錛屽緙栬瘧鍣ㄨ岃█錛屽洜涓築STR鐨勫畾涔夛紝wchar_t*鍜孊STR鏈夊悓鏍風殑鍚箟錛涚涓夛紝_bstr_t鍐呴儴鍚湁鐨剋char_t*鎸囧悜涓鐗囨寜BSTR鐨勫艦寮忓瓨鍌ㄦ暟鎹殑鍐呭瓨銆傛墍浠ワ紝鍗充嬌娌℃湁鏂囨。璇存槑錛宊bstr_t鍙互杞崲鎴怋STR錛岃繖縐嶈漿鎹粛鐒跺彲浠ユ甯歌繘琛屻?// Constructing
_bstr_t bs1 = "char string"; // construct from a LPCSTR
_bstr_t bs2 = L"wide char string"; // construct from a LPCWSTR
_bstr_t bs3 = bs1; // copy from another _bstr_t
_variant_t v = "Bob";
_bstr_t bs4 = v; // construct from a _variant_t that has a string
// Extracting data
LPCSTR psz1 = bs1; // automatically converts to MBCS string
LPCSTR psz2 = (LPCSTR) bs1; // cast OK, same as previous line
LPCWSTR pwsz1 = bs1; // returns the internal Unicode string
LPCWSTR pwsz2 = (LPCWSTR) bs1; // cast OK, same as previous line
BSTR bstr = bs1.copy(); // copies bs1, returns it as a BSTR
// ...
SysFreeString ( bstr ); 銆銆娉ㄦ剰_bstr_t涔熸彁渚沜har*鍜寃char_t*涔嬮棿鐨勮漿鎹㈡搷浣滅銆傝繖鏄竴涓煎緱鎬鐤戠殑璁捐錛屽洜涓哄嵆浣垮畠浠槸闈炲父閲忓瓧絎︿覆鎸囬拡錛屼綘涔熶竴瀹氫笉鑳戒嬌鐢ㄨ繖浜涙寚閽堝幓淇敼瀹冧滑鎸囧悜鐨勭紦鍐插尯鐨勫唴瀹癸紝鍥犱負閭e皢鐮村潖鍐呴儴鐨凚STR緇撴瀯銆?BR>_variant_t 銆銆_variant_t鏄竴涓VARIANT鐨勫畬鏁村皝瑁咃紝瀹冩彁渚涘緢澶氭瀯閫犲嚱鏁板拰杞崲鍑芥暟鏉ユ搷浣滀竴涓猇ARIANT鍙兘鍖呭惈鐨勫ぇ閲忕殑鏁版嵁綾誨瀷銆傝繖閲岋紝鎴戝皢鍙粙緇嶄笌瀛楃涓叉湁鍏崇殑鎿嶄綔銆?// Constructing
_variant_t v1 = "char string"; // construct from a LPCSTR
_variant_t v2 = L"wide char string"; // construct from a LPCWSTR
_bstr_t bs1 = "Bob";
_variant_t v3 = bs1; // copy from a _bstr_t object
// Extracting data
_bstr_t bs2 = v1; // extract BSTR from the VARIANT
_bstr_t bs3 = (_bstr_t) v1; // cast OK, same as previous line 娉ㄦ剰 錛?BR>銆銆濡傛灉綾誨瀷杞崲涓嶈兘琚墽琛岋紝_variant_t鏂規硶鑳藉鎶涘嚭寮傚父錛屾墍浠ュ簲璇ュ噯澶囨崟鑾穇com_error寮傚父銆?BR>榪橀渶瑕佹敞鎰忕殑鏄?/B>錛?BR>銆銆娌℃湁浠庝竴涓猒variant_t鍙橀噺鍒頒竴涓狹BCS瀛楃涓茬殑鐩存帴杞崲銆備綘闇瑕佸垱寤轟竴涓復鏃剁殑_bstr_t鍙橀噺錛屼嬌鐢ㄦ彁渚沀nicode鍒癕BCS杞崲鐨勫彟涓涓瓧絎︿覆綾繪垨鑰呬嬌鐢ㄤ竴涓狝TL杞崲瀹忋?BR>銆銆涓嶅儚_bstr_t錛屼竴涓猒variant_t鍙橀噺鍙互琚洿鎺ヤ綔涓哄弬鏁頒紶閫掔粰涓涓狢OM鏂規硶銆俖variant_t 銆銆緇ф壙鑷猇ARIANT綾誨瀷錛屾墍浠ヤ紶閫掍竴涓猒variant_t鏉ヤ唬鏇縑ARIANT鍙橀噺鏄疌++璇█鎵鍏佽鐨勩?BR> STL 綾?/B> 銆銆STL鍙湁涓涓瓧絎︿覆綾伙紝basic_string銆備竴涓猙asic_string綆$悊涓涓互0鍋氱粨鏉熺鐨勫瓧絎︿覆鏁扮粍銆傚瓧絎︾殑綾誨瀷鏄痓asic_string妯¤埇鐨勫弬鏁般傛葷殑鏉ヨ錛屼竴涓猙asic_string綾誨瀷鐨勫彉閲忓簲璇ヨ褰撲綔涓嶉忔槑鐨勫璞°備綘鍙互寰楀埌涓涓寚鍚戝唴閮ㄧ紦鍐插尯鐨勫彧璇繪寚閽堬紝浣嗘槸浠諱綍鍐欐搷浣滃繀欏諱嬌鐢╞asic_string鐨勬搷浣滅鍜屾柟娉曘?BR>銆銆basic_string鏈変袱涓瀹氫箟鐨勭被鍨嬶細鍖呭惈char鐨剆tring綾誨瀷鍜屽寘鍚玾char_t鐨剋string綾誨瀷銆傝繖閲屾病鏈夊唴緗殑鍖呭惈TCHAR鐨勭被鍨嬶紝浣嗘槸浣犲彲浠ヤ嬌鐢ㄤ笅闈㈠垪鍑虹殑浠g爜鏉ュ疄鐜般?// Specializations
typedef basic_string tstring; // string of TCHARs
// Constructing
string str = "char string"; // construct from a LPCSTR
wstring wstr = L"wide char string"; // construct from a LPCWSTR
tstring tstr = _T("TCHAR string"); // construct from a LPCTSTR
// Extracting data
LPCSTR psz = str.c_str(); // read-only pointer to str''s buffer
LPCWSTR pwsz = wstr.c_str(); // read-only pointer to wstr''s buffer
LPCTSTR ptsz = tstr.c_str(); // read-only pointer to tstr''s buffer
銆銆涓嶅儚_bstr_t錛屼竴涓猙asic_string鍙橀噺涓嶈兘鍦ㄥ瓧絎﹂泦涔嬮棿鐩存帴杞崲銆傜劧鑰岋紝浣犲彲浠ヤ紶閫掔敱c_str()榪斿洖鐨勬寚閽堢粰鍙﹀涓涓被鐨勬瀯閫犲嚱鏁幫紙濡傛灉榪欎釜綾葷殑鏋勯犲嚱鏁版帴鍙楄繖縐嶅瓧絎︾被鍨嬶級銆備緥濡傦細 // Example, construct _bstr_t from basic_string
_bstr_t bs1 = str.c_str(); // construct a _bstr_t from a LPCSTR
_bstr_t bs2 = wstr.c_str(); // construct a _bstr_t from a LPCWSTR ATL 綾?/B>CComBSTR 銆銆CComBSTR 鏄?ATL 涓殑 BSTR 灝佽綾伙紝瀹冨湪鏌愪簺鎯呭喌涓嬫瘮_bstr_t鏈夌敤鐨勫銆傛渶寮曚漢娉ㄦ剰鐨勬槸CComBSTR鍏佽璁塊棶搴曞眰鐨凚STR錛岃繖鎰忓懗鐫浣犲彲浠ヤ紶閫掍竴涓狢ComBSTR瀵硅薄緇機OM鐨勬柟娉曘侰ComBSTR瀵硅薄鑳藉鏇夸綘鑷姩鐨勭鐞咮STR鐨勫唴瀛樸備緥濡傦紝鍋囪浣犳兂璋冪敤涓嬮潰榪欎釜鎺ュ彛鐨勬柟娉曪細 // Sample interface:
struct IStuff : public IUnknown
{
// Boilerplate COM stuff omitted...
STDMETHOD(SetText)(BSTR bsText);
STDMETHOD(GetText)(BSTR* pbsText);
}; 銆銆CComBSTR鏈変竴涓搷浣滅--BSTR鏂規硶錛屾墍浠ュ畠鑳界洿鎺ヨ浼犵粰SetText()鍑芥暟銆傝繕鏈夊彟澶栦竴涓搷浣?-&錛岃繖涓搷浣滅榪斿洖涓涓狟STR*銆傛墍浠ワ紝浣犲彲浠ュ涓涓狢ComBSTR瀵硅薄浣跨敤&鎿嶄綔絎︼紝鐒跺悗鎶婂畠浼犵粰闇瑕丅STR*鍙傛暟鐨勫嚱鏁般?CComBSTR bs1;
CComBSTR bs2 = "new text";
pStuff->GetText ( &bs1 ); // ok, takes address of internal BSTR
pStuff->SetText ( bs2 ); // ok, calls BSTR converter
pStuff->SetText ( (BSTR) bs2 ); // cast ok, same as previous line 銆銆CComBSTR鏈夊拰_bstr_t鐩鎬技鐨勬瀯閫犲嚱鏁幫紝鐒惰屽嵈娌℃湁鍐呯疆鐨勫悜MBCS瀛楃涓茶漿鎹㈢殑鍑芥暟銆傚洜姝わ紝浣犻渶瑕佷嬌鐢ㄤ竴涓狝TL杞崲瀹忋?// Constructing
CComBSTR bs1 = "char string"; // construct from a LPCSTR
CComBSTR bs2 = L"wide char string"; // construct from a LPCWSTR
CComBSTR bs3 = bs1; // copy from another CComBSTR
CComBSTR bs4;
bs4.LoadString ( IDS_SOME_STR ); // load string from string table
// Extracting data
BSTR bstr1 = bs1; // returns internal BSTR, but don''t modify it!
BSTR bstr2 = (BSTR) bs1; // cast ok, same as previous line
BSTR bstr3 = bs1.Copy(); // copies bs1, returns it as a BSTR
BSTR bstr4;
bstr4 = bs1.Detach(); // bs1 no longer manages its BSTR
// ...
SysFreeString ( bstr3 );
SysFreeString ( bstr4 ); 銆銆娉ㄦ剰鍦ㄤ笂涓緥瀛愪腑浣跨敤浜咲etach()鏂規硶銆傝皟鐢ㄨ繖涓柟娉曞悗錛孋ComBSTR瀵硅薄涓嶅啀綆$悊瀹冪殑BSTR瀛楃涓叉垨鑰呰瀹冨搴旂殑鍐呭瓨銆傝繖灝辨槸bstr4闇瑕佽皟鐢⊿ysFreeString()鐨勫師鍥犮?BR>銆銆鍋氫竴涓ˉ鍏呰鏄庯細閲嶈澆鐨?amp;鎿嶄綔絎︽剰鍛崇潃鍦ㄤ竴浜汼TL瀹瑰櫒涓綘涓嶈兘鐩存帴浣跨敤CComBSTR鍙橀噺錛屾瘮濡俵ist銆傚鍣ㄨ姹?amp;鎿嶄綔絎﹁繑鍥炰竴涓寚鍚戝鍣ㄥ寘鍚殑綾葷殑鎸囬拡錛屼絾鏄CComBSTR鍙橀噺浣跨敤&鎿嶄綔絎﹁繑鍥炵殑鏄疊STR*錛岃屼笉鏄疌ComBSTR*銆傜劧鑰岋紝鏈変竴涓狝TL綾誨彲浠ヨВ鍐寵繖涓棶棰橈紝榪欎釜綾繪槸CAdapt銆備緥濡傦紝浣犲彲浠ヨ繖鏍峰0鏄庝竴涓狢ComBSTR鐨刲ist錛?PRE>std::list< CAdapt > bstr_list;
銆銆CAdapt鎻愪緵瀹瑰櫒鎵闇瑕佺殑鎿嶄綔絎︼紝浣嗚繖浜涙搷浣滅瀵逛綘鐨勪唬鐮佹槸閫忔槑鐨勩備綘鍙互鎶婁竴涓猙str_list褰撲綔涓涓狢ComBSTR鐨刲ist鏉ヤ嬌鐢ㄣ?BR>CComVariant 銆銆CComVariant鏄疺ARIANT鐨勫皝瑁呯被銆傜劧鑰岋紝涓嶅儚_variant_t錛屽湪CComVariant涓璙ARIANT娌℃湁琚殣钘忋備簨瀹炰笂浣犻渶瑕佺洿鎺ヨ闂甐ARIANT鐨勬垚鍛樸侰ComVariant鎻愪緵浜嗗緢澶氭瀯閫犲嚱鏁版潵瀵筕ARIANT鑳藉鍖呭惈鐨勫縐嶇被鍨嬭繘琛屽鐞嗐傝繖閲岋紝鎴戝皢鍙粙緇嶅拰瀛楃涓茬浉鍏崇殑鎿嶄綔銆?
// Constructing
CComVariant v1 = "char string"; // construct from a LPCSTR
CComVariant v2 = L"wide char string"; // construct from a LPCWSTR
CComBSTR bs1 = "BSTR bob";
CComVariant v3 = (BSTR) bs1; // copy from a BSTR
// Extracting data
CComBSTR bs2 = v1.bstrVal; // extract BSTR from the VARIANT 銆銆涓嶅儚_variant_t錛岃繖閲屾病鏈夋彁渚涢拡瀵筕ARIANT鍖呭惈鐨勫悇縐嶇被鍨嬬殑杞崲鎿嶄綔絎︺傛濡備笂闈粙緇嶇殑錛屼綘蹇呴』鐩存帴璁塊棶VARIANT鐨勬垚鍛樺茍涓旂‘淇濊繖涓猇ARIANT鍙橀噺淇濆瓨鐫浣犳湡鏈涚殑綾誨瀷銆傚鏋滀綘闇瑕佹妸涓涓狢ComVariant綾誨瀷鐨勬暟鎹漿鎹㈡垚涓涓狟STR綾誨瀷鐨勬暟鎹紝浣犲彲浠ヨ皟鐢–hangeType()鏂規硶銆?CComVariant v4 = ... // Init v4 from somewhere
CComBSTR bs3;
if ( SUCCEEDED( v4.ChangeType ( VT_BSTR ) ))
bs3 = v4.bstrVal; 銆銆鍍廮variant_t涓鏍鳳紝CComVariant涔熸病鏈夋彁渚涘悜MBCS瀛楃涓茶漿鎹㈢殑杞崲鎿嶄綔銆備綘闇瑕佸垱寤轟竴涓猒bstr_t綾誨瀷鐨勪腑闂村彉閲忥紝浣跨敤鎻愪緵浠嶶nicode鍒癕BCS杞崲鐨勫彟涓涓瓧絎︿覆綾伙紝鎴栬呬嬌鐢ㄤ竴涓狝TL鐨勮漿鎹㈠畯銆?BR> ATL杞崲瀹?/B> 銆銆ATL錛氳漿鎹㈠畯鏄悇縐嶅瓧絎︾紪鐮佷箣闂磋繘琛岃漿鎹㈢殑涓縐嶅緢鏂逛究鐨勬柟寮忥紝鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛屽畠浠樉寰楅潪甯告湁鐢ㄣ侫TL杞崲瀹忕殑鍚嶇О鏄牴鎹笅闈㈢殑妯″紡鏉ュ懡鍚嶇殑[婧愮被鍨媇2[鏂扮被鍨媇鎴栬匸婧愮被鍨媇2C[鏂扮被鍨媇銆傛嵁鏈夌浜岀褰㈠紡鐨勫悕瀛楃殑瀹忕殑杞崲緇撴灉鏄父閲忔寚閽堬紙瀵瑰簲鍚嶅瓧涓殑"C"錛夈傚悇縐嶇被鍨嬬殑綆縐板涓嬶細A: MBCS string, char* (A for ANSI)
W: Unicode string, wchar_t* (W for wide)
T: TCHAR string, TCHAR*
OLE: OLECHAR string, OLECHAR* (in practice, equivalent to W)
BSTR: BSTR (used as the destination type only)
銆銆鎵浠ワ紝W2A()瀹忔妸涓涓猆nicode瀛楃涓茶漿鎹㈡垚涓涓狹BCS瀛楃涓層俆2CW()瀹忔妸涓涓猅CHAR瀛楃涓茶漿杞垚涓涓猆nicode瀛楃涓插父閲忋?BR>銆銆涓轟簡浣跨敤榪欎簺瀹忥紝闇瑕佸厛鍖呭惈atlconv.h澶存枃浠躲備綘鐢氳嚦鍙互鍦ㄩ潪ATL宸ョ▼涓寘鍚繖涓ご鏂囦歡鏉ヤ嬌鐢ㄥ叾涓畾涔夌殑瀹忥紝鍥犱負榪欎釜澶存枃浠剁嫭绔嬩簬ATL涓殑鍏朵粬閮ㄥ垎錛屼笉闇瑕佷竴涓猒Module鍏ㄥ眬鍙橀噺銆傚綋浣犲湪涓涓嚱鏁頒腑浣跨敤杞崲瀹忔椂錛岄渶瑕佹妸USES_CONVERSION瀹忔斁鍦ㄥ嚱鏁扮殑寮澶淬傚畠瀹氫箟浜嗚漿鎹㈠畯鎵闇鐨勪竴浜涘眬閮ㄥ彉閲忋?BR>銆銆褰撹漿鎹㈢殑鐩殑綾誨瀷鏄櫎浜咮STR浠ュ鐨勫叾浠栫被鍨嬫椂錛岃杞崲鐨勫瓧絎︿覆鏄瓨鍦ㄦ爤涓殑銆傛墍浠ワ紝濡傛灉浣犳兂璁╁瓧絎︿覆鐨勭敓鍛藉懆鏈熸瘮褰撳墠鐨勫嚱鏁伴暱錛屼綘闇瑕佹妸榪欎釜瀛楃涓叉嫹璐濆埌鍏朵粬鐨勫瓧絎︿覆綾諱腑銆傚綋鐩殑綾誨瀷鏄疊STR鏃訛紝鍐呭瓨涓嶄細鑷姩琚噴鏀撅紝浣犲繀欏繪妸榪斿洖鍊艱祴緇欎竴涓狟STR鍙橀噺鎴栬呬竴涓狟STR灝佽綾諱互閬垮厤鍐呭瓨娉勬紡銆?BR>銆銆涓嬮潰鏄竴浜涘悇縐嶈漿鎹㈠畯鐨勪嬌鐢ㄤ緥瀛愶細
// Functions taking various strings:
void Foo ( LPCWSTR wstr );
void Bar ( BSTR bstr );
// Functions returning strings:
void Baz ( BSTR* pbstr );
#include
main()
{
using std::string;
USES_CONVERSION; // declare locals used by the ATL macros
// Example 1: Send an MBCS string to Foo()
LPCSTR psz1 = "Bob";
string str1 = "Bob";
Foo ( A2CW(psz1) );
Foo ( A2CW(str1.c_str()) );
// Example 2: Send a MBCS and Unicode string to Bar()
LPCSTR psz2 = "Bob";
LPCWSTR wsz = L"Bob";
BSTR bs1;
CComBSTR bs2;
bs1 = A2BSTR(psz2); // create a BSTR
bs2.Attach ( W2BSTR(wsz) ); // ditto, assign to a CComBSTR
Bar ( bs1 );
Bar ( bs2 );
SysFreeString ( bs1 ); // free bs1 memory
// No need to free bs2 since CComBSTR will do it for us.
// Example 3: Convert the BSTR returned by Baz()
BSTR bs3 = NULL;
string str2;
Baz ( &bs3 ); // Baz() fills in bs3
str2 = W2CA(bs3); // convert to an MBCS string
SysFreeString ( bs3 ); // free bs3 memory
} 銆銆姝e浣犳墍鐪嬭鐨勶紝褰撲綘鏈変竴涓拰鍑芥暟鎵闇鐨勫弬鏁扮被鍨嬩笉鍚岀殑瀛楃涓叉椂錛屼嬌鐢ㄨ繖浜涜漿鎹㈠畯鏄潪甯告柟渚跨殑銆? MFC綾?/B>CString 銆銆鍥犱負涓涓狹FC CString綾葷殑瀵硅薄鍖呭惈TCHAR綾誨瀷鐨勫瓧絎︼紝鎵浠ョ‘鍒囩殑瀛楃綾誨瀷鍙栧喅浜庝綘鎵瀹氫箟鐨勯澶勭悊絎﹀彿銆傚ぇ浣撴潵璇達紝CString 寰堝儚STL string錛岃繖鎰忓懗鐫浣犲繀欏繪妸瀹冨綋鎴愪笉閫忔槑鐨勫璞★紝鍙兘浣跨敤CString鎻愪緵鐨勬柟娉曟潵淇敼CString瀵硅薄銆侰String鏈変竴涓猻tring鎵涓嶅叿澶囩殑浼樼偣錛欳String鍏鋒湁鎺ユ敹MBCS鍜孶nicode涓ょ瀛楃涓茬殑鏋勯犲嚱鏁幫紝瀹冭繕鏈変竴涓狶PCTSTR杞崲絎︼紝鎵浠ヤ綘鍙互鎶奀String瀵硅薄鐩存帴浼犵粰涓涓帴鏀禠PCTSTR鐨勫嚱鏁拌屼笉闇瑕佽皟鐢╟_str()鍑芥暟銆?// Constructing
CString s1 = "char string"; // construct from a LPCSTR
CString s2 = L"wide char string"; // construct from a LPCWSTR
CString s3 ( '' '', 100 ); // pre-allocate a 100-byte buffer, fill with spaces
CString s4 = "New window text";
// You can pass a CString in place of an LPCTSTR:
SetWindowText ( hwndSomeWindow, s4 );
// Or, equivalently, explicitly cast the CString:
SetWindowText ( hwndSomeWindow, (LPCTSTR) s4 ); 銆銆浣犲彲浠ヤ粠浣犵殑瀛楃涓茶〃涓杞戒竴涓瓧絎︿覆錛孋String鐨勪竴涓瀯閫犲嚱鏁板拰LoadString()鍑芥暟鍙互瀹屾垚瀹冦侳ormat()鏂規硶鑳藉浠庡瓧絎︿覆琛ㄤ腑闅忔剰鐨勮鍙栦竴涓叿鏈変竴瀹氭牸寮忕殑瀛楃涓層傘銆銆銆銆 // Constructing/loading from string table
CString s5 ( (LPCTSTR) IDS_SOME_STR ); // load from string table
CString s6, s7;
// Load from string table.
s6.LoadString ( IDS_SOME_STR );
// Load printf-style format string from the string table:
s7.Format ( IDS_SOME_FORMAT, "bob", nSomeStuff, ... ); 銆銆絎竴涓瀯閫犲嚱鏁扮湅璧鋒潵鏈夌偣濂囨紝浣嗘槸榪欏疄闄呬笂鏄枃妗h鏄庣殑瑁呭叆涓涓瓧絎︿覆鐨勬柟娉曘?娉ㄦ剰錛屽涓涓狢String鍙橀噺錛屼綘鍙互浣跨敤鐨勫敮涓鍚堟硶杞崲絎︽槸LPCTSTR銆傝漿鎹㈡垚LPTSTR錛堥潪甯擱噺鎸囬拡錛夋槸閿欒鐨勩傚吇鎴愭妸涓涓狢String鍙橀噺杞崲鎴怢PTSTR鐨勪範鎯皢浼氱粰浣犲甫鏉ヤ激瀹籌紝鍥犱負褰撲綘鐨勭▼搴忓悗鏉ュ穿婧冩椂錛屼綘鍙兘涓嶇煡閬撲負浠涔堬紝鍥犱負浣犲埌澶勯兘浣跨敤鍚屾牱鐨勪唬鐮佽岄偅鏃跺畠浠兘鎭板閥姝e父宸ヤ綔銆傛紜殑寰楀埌涓涓寚鍚戠紦鍐插尯鐨勯潪甯擱噺鎸囬拡鐨勬柟娉曟槸璋冪敤GetBuffer()鏂規硶銆備笅闈㈡槸姝g‘鐨勭敤娉曠殑涓涓緥瀛愶紝榪欐浠g爜鏄粰涓涓垪琛ㄦ帶浠朵腑鐨勯」璁懼畾鏂囧瓧錛?CString str = _T("new text");
LVITEM item = {0};
item.mask = LVIF_TEXT;
item.iItem = 1;
item.pszText = (LPTSTR)(LPCTSTR) str; // WRONG!
item.pszText = str.GetBuffer(0); // correct
ListView_SetItem ( &item );
str.ReleaseBuffer(); // return control of the buffer to str 銆銆pszText鎴愬憳鏄竴涓狶PTSTR鍙橀噺錛屼竴涓潪甯擱噺鎸囬拡錛屽洜姝や綘闇瑕佸str璋冪敤GetBuffer()銆侴etBuffer()鐨勫弬鏁版槸浣犻渶瑕丆String涓虹紦鍐插尯鍒嗛厤鐨勬渶灝忛暱搴︺傚鏋滃洜涓烘煇浜涘師鍥狅紝浣犻渶瑕佷竴涓彲淇敼鐨勭紦鍐插尯鏉ュ瓨鏀?K TCHARs錛屼綘闇瑕佽皟鐢℅etBuffer(1024)銆傛妸0浣滀負鍙傛暟鏃訛紝GetBuffer()榪斿洖鐨勬槸鎸囧悜瀛楃涓插綋鍓嶅唴瀹圭殑鎸囬拡銆?BR>銆銆涓婇潰鍒掔嚎鐨勮鍙ュ彲浠ヨ緙栬瘧錛屽湪榪欑鎯呭喌涓嬶紝鐢氳嚦鍙互姝e父璧蜂綔鐢ㄣ備絾榪欏茍涓嶆剰鍛崇潃榪欒浠g爜鏄紜殑銆傞氳繃浣跨敤闈炲父閲忚漿鎹紝浣犲凡緇忕牬鍧忎簡闈㈠悜瀵硅薄鐨勫皝瑁咃紝騫跺CString鐨勫唴閮ㄥ疄鐜頒綔浜嗘煇浜涘亣瀹氥傚鏋滀綘鏈夎繖鏍風殑杞崲涔犳儻錛屼綘緇堝皢浼氶櫡鍏ヤ唬鐮佸穿婧冪殑澧冨湴銆備綘浼氭兂浠g爜涓轟粈涔堜笉鑳芥甯稿伐浣滀簡錛屽洜涓轟綘鍒板閮戒嬌鐢ㄥ悓鏍風殑浠g爜鑰岄偅浜涗唬鐮佺湅璧鋒潵鏄紜殑銆?BR>銆銆浣犵煡閬撲漢浠繪槸鎶辨ㄧ幇鍦ㄧ殑杞歡鐨刡ug鏄涔堢殑澶氬悧錛熻蔣浠朵腑鐨刡ug鏄洜涓虹▼搴忓憳鍐欎簡涓嶆紜殑浠g爜銆傞毦閬撲綘鐪熺殑鎯沖啓涓浜涗綘鐭ラ亾鏄敊璇殑浠g爜鏉ヤ負鎵鏈夌殑杞歡閮芥弧鏄痓ug榪欑璁よ瘑鍋氳礎鐚悧錛熻姳浜涙椂闂存潵瀛︿範浣跨敤CString鐨勬紜柟娉曡浣犵殑浠g爜鍦ㄤ換浣曟椂闂撮兘姝e父宸ヤ綔鎶娿?BR>銆銆CString 鏈変袱涓嚱鏁版潵浠庝竴涓?CString 鍒涘緩涓涓?BSTR銆傚畠浠槸 AllocSysString() 鍜孲etSysString()銆?// Converting to BSTR
CString s5 = "Bob!";
BSTR bs1 = NULL, bs2 = NULL;
bs1 = s5.AllocSysString();
s5.SetSysString ( &bs2 );
SysFreeString ( bs1 );
SysFreeString ( bs2 ); COleVariant 銆銆COleVariant鍜孋ComVariant.寰堢浉浼箋侰OleVariant緇ф壙鑷猇ARIANT錛屾墍浠ュ畠鍙互浼犵粰鎺ユ敹VARIANT鐨勫嚱鏁般傜劧鑰岋紝涓嶅儚CComVariant錛孋OleVariant鍙湁涓涓狶PCTSTR鏋勯犲嚱鏁般傛病鏈夊LPCSTR 鍜孡PCWSTR鐨勬瀯閫犲嚱鏁般傚湪澶у鏁版儏鍐典笅榪欎笉鏄竴涓棶棰橈紝鍥犱負涓嶇鎬庢牱浣犵殑瀛楃涓插緢鍙兘鏄疞PCTSTRs錛屼絾榪欐槸涓涓渶瑕佹剰璇嗗埌鐨勯棶棰樸侰OleVariant榪樻湁涓涓帴鏀禖String鍙傛暟鐨勬瀯閫犲嚱鏁般?// Constructing
CString s1 = _T("tchar string");
COleVariant v1 = _T("Bob"); // construct from an LPCTSTR
COleVariant v2 = s1; // copy from a CString 銆銆鍍廋ComVariant涓鏍鳳紝浣犲繀欏葷洿鎺ヨ闂甐ARIANT鐨勬垚鍛樸傚鏋滈渶瑕佹妸VARIANT杞崲鎴愪竴涓瓧絎︿覆錛屼綘搴旇浣跨敤ChangeType()鏂規硶銆傜劧鑰岋紝COleVariant::ChangeType()濡傛灉澶辮觸浼氭姏鍑哄紓甯革紝鑰屼笉鏄繑鍥炰竴涓〃紺哄け璐ョ殑HRESULT浠g爜銆?// Extracting data
COleVariant v3 = ...; // fill in v3 from somewhere
BSTR bs = NULL;
try
{
v3.ChangeType ( VT_BSTR );
bs = v3.bstrVal;
}
catch ( COleException* e )
{
// error, couldn''t convert
}
SysFreeString ( bs ); WTL 綾?/B>CString 銆銆WTL鐨凜String鐨勮涓哄拰MFC鐨?CString瀹屽叏涓鏍鳳紝鎵浠ヤ綘鍙互鍙傝冧笂闈㈠叧浜嶮FC鐨?CString鐨勪粙緇嶃?BR> CLR 鍜?VC 7 綾?/B> 銆銆System::String鏄敤鏉ュ鐞嗗瓧絎︿覆鐨?NET綾匯傚湪鍐呴儴錛屼竴涓猄tring瀵硅薄鍖呭惈涓涓笉鍙敼鍙樼殑瀛楃涓插簭鍒椼備換浣曞String瀵硅薄鐨勬搷浣滃疄闄呬笂閮芥槸榪斿洖浜嗕竴涓柊鐨凷tring瀵硅薄錛屽洜涓哄師濮嬬殑瀵硅薄鏄笉鍙敼鍙樼殑銆係tring鐨勪竴涓壒鎬ф槸濡傛灉浣犳湁涓嶆涓涓猄tring瀵硅薄鍖呭惈鐩稿悓鐨勫瓧絎﹀簭鍒楋紝瀹冧滑瀹為檯涓婃槸鎸囧悜鐩稿悓鐨勫璞$殑銆傜浉瀵逛簬C++鐨勪嬌鐢ㄦ墿灞曟槸澧炲姞浜嗕竴涓柊鐨勫瓧絎︿覆甯擱噺鍓嶇紑S錛孲鐢ㄦ潵浠h〃涓涓彈鎺х殑瀛楃涓插父閲忥紙a managed string literal錛夈?// Constructing
String* ms = S"This is a nice managed string"; 銆銆浣犲彲浠ヤ紶閫掍竴涓潪鍙楁帶鐨勫瓧絎︿覆鏉ュ垱寤轟竴涓猄tring瀵硅薄錛屼絾鏄牱浼氭瘮浣跨敤鍙楁帶瀛楃涓叉潵鍒涘緩String瀵硅薄閫犳垚鏁堢巼鐨勫井灝忔崯澶便傝繖鏄洜涓烘墍鏈変互S浣滀負鍓嶇紑鐨勭浉鍚岀殑瀛楃涓插疄渚嬮兘浠h〃鍚屾牱鐨勫璞★紝浣嗚繖瀵歸潪鍙楁帶瀵硅薄鏄笉閫傜敤鐨勩備笅闈㈢殑浠g爜娓呮鍦伴槓鏄庝簡榪欎竴鐐癸細 String* ms1 = S"this is nice";
String* ms2 = S"this is nice";
String* ms3 = L"this is nice";
Console::WriteLine ( ms1 == ms2 ); // prints true
Console::WriteLine ( ms1 == ms3); // prints false 姝g‘鐨勬瘮杈冨彲鑳芥病鏈変嬌鐢⊿鍓嶇紑鐨勫瓧絎︿覆鐨勬柟娉曟槸浣跨敤String::CompareTo() Console::WriteLine ( ms1->CompareTo(ms2) );
Console::WriteLine ( ms1->CompareTo(ms3) ); 銆銆涓婇潰鐨勪袱琛屼唬鐮侀兘浼氭墦鍗?錛?琛ㄧず涓や釜瀛楃涓茬浉絳夈?String鍜孧FC 7 CString涔嬮棿鐨勮漿鎹㈡槸寰堝鏄撶殑銆侰String鏈変竴涓悜LPCTSTR鐨勮漿鎹㈡搷浣滐紝鑰孲tring鏈変袱涓帴鏀禼har* 鍜?wchar_t*鐨勬瀯閫犲嚱鏁幫紝鍥犳浣犲彲浠ユ妸涓涓狢String鍙橀噺鐩存帴浼犵粰涓涓猄tring鐨勬瀯閫犲嚱鏁般?CString s1 ( "hello world" );
String* s2 ( s1 ); // copy from a CString 鍙嶆柟鍚戠殑杞崲涔熷緢綾諱技 String* s1 = S"Three cats";
CString s2 ( s1 ); 銆銆榪欎篃璁鎬細浣夸綘鎰熷埌涓鐐硅糠鎯戯紝浣嗘槸瀹冪‘瀹炴槸璧蜂綔鐢ㄧ殑銆傚洜涓轟粠VS.NET 寮濮嬶紝CString 鏈変簡涓涓帴鏀禨tring 瀵硅薄鐨勬瀯閫犲嚱鏁般? CStringT ( System::String* pString ); 瀵逛簬涓浜涘揩閫熸搷浣滐紝浣犲彲鑳芥兂璁塊棶搴曞眰鐨勫瓧絎︿覆錛?String* s1 = S"Three cats";
Console::WriteLine ( s1 );
const __wchar_t __pin* pstr = PtrToStringChars(s1);
for ( int i = 0; i < wcslen(pstr); i++ )
(*const_cast<__wchar_t*>(pstr+i))++;
Console::WriteLine ( s1 ); 銆銆PtrToStringChars()榪斿洖涓涓寚鍚戝簳灞傚瓧絎︿覆鐨刢onst __wchar_t* 錛屾垜浠渶瑕佸浐瀹氬畠錛屽惁鍒欏瀮鍦炬敹闆嗗櫒鎴栬浼氬湪鎴戜滑姝e湪綆$悊瀹冪殑鍐呭鐨勬椂鍊欑Щ鍔ㄤ簡瀹冦? 鍦?printf-style 鏍煎紡鍑芥暟涓嬌鐢ㄥ瓧絎︿覆綾?/B> 銆銆褰撲綘鍦╬rintf()鎴栬呯被浼肩殑鍑芥暟涓嬌鐢ㄥ瓧絎︿覆灝佽綾繪椂浣犲繀欏誨崄鍒嗗皬蹇冦傝繖浜涘嚱鏁板寘鎷瑂printf()鍜屽畠鐨勫彉浣擄紝榪樻湁TRACE鍜孉TLTRACE瀹忋傚洜涓鴻繖浜涘嚱鏁版病鏈夊娣誨姞鐨勫弬鏁扮殑綾誨瀷媯鏌ワ紝浣犲繀欏誨皬蹇冿紝鍙兘浼犵粰瀹冧滑C璇█椋庢牸鐨勫瓧絎︿覆鎸囬拡錛岃屼笉鏄竴涓畬鏁寸殑瀛楃涓茬被銆?BR>銆銆渚嬪錛岃鎶婁竴涓猒bstr_t 瀛楃涓蹭紶緇橝TLTRACE()錛屼綘蹇呴』浣跨敤鏄懼紡杞崲(LPCSTR) 鎴栬?LPCWSTR)錛?PRE>_bstr_t bs = L"Bob!";
ATLTRACE("The string is: %s in line %d\n", (LPCSTR) bs, nLine);
銆銆濡傛灉浣犲繕浜嗕嬌鐢ㄨ漿鎹㈢鑰屾妸鏁翠釜_bstr_t瀵硅薄浼犵粰浜嗗嚱鏁幫紝灝嗕細鏄劇ず涓浜涙鏃犳剰涔夌殑杈撳嚭錛屽洜涓篲bstr_t淇濆瓨鐨勫唴閮ㄦ暟鎹細鍏ㄩ儴琚緭鍑恒?BR> 鎵鏈夌被鐨勬葷粨 銆銆涓や釜瀛楃涓茬被涔嬮棿榪涜杞崲鐨勫父鐢ㄦ柟寮忔槸錛氬厛鎶婃簮瀛楃涓茶漿鎹㈡垚涓涓狢璇█椋庢牸鐨勫瓧絎︿覆鎸囬拡錛岀劧鍚庢妸榪欎釜鎸囬拡浼犻掔粰鐩殑綾誨瀷鐨勬瀯閫犲嚱鏁般備笅闈㈣繖寮犺〃鏄劇ず浜嗘庢牱鎶婁竴涓瓧絎︿覆杞崲鎴愪竴涓狢璇█椋庢牸鐨勫瓧絎︿覆鎸囬拡浠ュ強鍝簺綾誨叿鏈夋帴鏀禖璇█椋庢牸鐨勫瓧絎︿覆鎸囬拡鐨勬瀯閫犲嚱鏁般?/P>
Class
string type
convert to char*?
convert to const char*?
convert to wchar_t*?
convert to const wchar_t*?
convert to BSTR?
construct from char*?
construct from wchar_t*?
_bstr_t
BSTR
yes cast1
yes cast
yes cast1
yes cast
yes2
yes
yes
_variant_t
BSTR
no
no
no
cast to _bstr_t3
cast to _bstr_t3
yes
yes
string
MBCS
no
yes c_str() method
no
no
no
yes
no
wstring
Unicode
no
no
no
yes c_str() method
no
no
yes
CComBSTR
BSTR
no
no
no
yes cast to BSTR
yes cast
yes
yes
CComVariant
BSTR
no
no
no
yes4
yes4
yes
yes
CString
TCHAR
no6
in MBCS builds, cast
no6
in Unicode builds, cast
no5
yes
yes
COleVariant
BSTR
no
no
no
yes4
yes4
in MBCS builds
in Unicode builds
1銆佸嵆浣?_bstr_t 鎻愪緵浜嗗悜闈炲父閲忔寚閽堢殑杞崲鎿嶄綔絎︼紝淇敼搴曞眰鐨勭紦鍐插尯涔熶細宸插紩璧稧PF濡傛灉浣犳孩鍑轟簡緙撳啿鍖烘垨鑰呴犳垚鍐呭瓨娉勬紡銆?
2 銆乢bstr_t 鍦ㄥ唴閮ㄧ敤涓涓?wchar_t* 鏉ヤ繚瀛?BSTR錛屾墍浠ヤ綘鍙互浣跨敤 const wchar_t* 鏉ヨ闂瓸STR銆傝繖鏄竴涓疄鐜扮粏鑺傦紝浣犲彲浠ュ皬蹇冪殑浣跨敤瀹冿紝灝嗘潵榪欎釜緇嗚妭涔熻浼氭敼鍙樸?
3 銆佸鏋滄暟鎹笉鑳借漿鎹㈡垚BSTR浼氭姏鍑轟竴涓紓甯搞?
4 銆佷嬌鐢?ChangeType()錛岀劧鍚庤闂?VARIANT 鐨?bstrVal 鎴愬憳銆傚湪MFC涓紝濡傛灉鏁版嵁杞崲涓嶆垚鍔熷皢浼氭姏鍑哄紓甯搞?
5 銆佽繖閲屾病鏈夎漿鎹?BSTR 鍑芥暟錛岀劧鑰?AllocSysString() 榪斿洖涓涓柊鐨凚STR銆?
6 銆佷嬌鐢?GetBuffer() 鏂規硶錛屼綘鍙互鏆傛椂鍦板緱鍒頒竴涓潪甯擱噺鐨凾CHAR鎸囬拡銆?
浣滆呯畝浠?BR> Michael Dunn錛?BR>銆銆 Michael Dunn灞呬綇鍦ㄩ槼鍏夊煄甯傛礇鏉夌煻銆備粬鏄姝ょ殑鍠滄榪欓噷鐨勫ぉ姘斾互鑷翠簬鎯充竴鐢熼兘浣忓湪榪欓噷銆備粬鍦?騫寸駭鏃跺紑濮嬬紪紼嬶紝閭f椂鐢ㄧ殑鐢佃剳鏄疉pple //e銆?995騫達紝鍦║CLA鑾峰緱鏁板瀛﹀+瀛︿綅錛岄殢鍚庡湪Symantec鍏徃鍋歈A宸ョ▼甯堬紝鍦?Norton AntiVirus 緇勫伐浣溿備粬鑷浜?Windows 鍜?MFC 緙栫▼銆?999-2000騫達紝浠栬璁″茍瀹炵幇浜?Norton AntiVirus鐨勬柊鐣岄潰銆?BR>銆銆Michael 鐜板湪鍦?Napster錛堜竴涓彁渚涘湪綰胯闃呴煶涔愭湇鍔$殑鍏徃錛夊仛寮鍙戝伐浣滐紝浠栬繕寮鍙戜簡UltraBar錛屼竴涓狪E宸ュ叿鏍忔彃浠訛紝瀹冨彲浠ヤ嬌緗戠粶鎼滅儲鏇村姞瀹規槗錛岀粰浜?googlebar 浠ユ矇閲嶆墦鍑伙紱浠栬繕寮鍙戜簡 CodeProject SearchBar錛涗笌浜哄叡鍚屽垱寤轟簡 Zabersoft 鍏徃錛岃鍏徃鍦ㄦ礇鏉夌煻鍜屼腹楹︾殑 Odense 閮借鏈夊姙浜嬪銆?BR>銆銆浠栧枩嬈㈢帺娓告垙銆傜埍鐜╃殑娓告垙鏈?pinball, bike riding錛屽伓灝旇繕鐜?PS, Dreamcasth 鍜?MAME 娓告垙銆備粬鍥犲繕浜嗚嚜宸辨浘緇忓榪囩殑璇█錛氭硶璇佹眽璇佹棩璇屾劅鍒版偛鍝銆?BR>Nishant S(Nish) 錛?BR>銆銆Nish鏄潵鑷嵃搴?Trivandrum,鐨?Microsoft Visual C++ MVP銆備粬浠?990騫村紑濮嬬紪鐮併傜幇鍦紝Nish涓轟綔涓哄悎鍚岄泧鍛樺湪瀹墮噷涓?CodeProject 宸ヤ綔銆傘銆銆 銆銆浠栬繕鍐欎簡涓閮ㄦ氮婕垙鍓с?TCHAR> Summer Love and Some more Cricket 銆嬪拰涓鏈紪紼嬩功綾嶃?TCHAR>Extending MFC applications with the .NET Framework 銆嬨備粬榪樼鐞嗚匨VP鐨勪竴涓綉绔檋ttp://www.voidnish.com/ 銆傚湪榪欎釜緗戠珯涓婏紝浣犲彲浠ョ湅鍒頒粬鐨勫緢澶氬叧浜庣紪紼嬫柟闈㈢殑鎬濇兂鍜屾枃绔犮?BR>Nish 榪樿鍒掑ソ 浜?TCHAR>鏃呮父錛屼粬甯屾湜鑷竴鐢熶腑鑳藉鍒拌揪鍦扮悆涓婂敖鍙兘澶氱殑鍦版柟銆?/TD>
鐩稿叧鏂囩珷
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
日韩午夜黄色 |
久久大香伊蕉在人线观看热2 |
亚洲高清av在线 |
久久aⅴ国产欧美74aaa |
久久综合九色欧美综合狠狠 |
久久免费视频网 |
亚洲欧美中文另类 |
久久成人资源 |
午夜精品www |
亚洲欧美在线一区 |
久久国产精品亚洲77777 |
亚洲免费视频一区二区 |
亚洲视屏在线播放 |
亚洲午夜一级 |
欧美一区二区三区播放老司机 |
亚洲午夜激情网页 |
久久成人18免费观看 |
久久夜色撩人精品 |
欧美激情在线免费观看 |
亚洲精品美女在线观看播放 |
亚洲高清不卡在线观看 |
亚洲精品一区二区网址 |
亚洲欧美在线免费观看 |
欧美 亚欧 日韩视频在线 |
欧美日韩精品在线观看 |
国产亚洲va综合人人澡精品 |
亚洲高清二区 |
性xx色xx综合久久久xx |
欧美77777 |
欧美一区在线直播 |
欧美三级不卡 |
夜夜嗨网站十八久久 |
老司机亚洲精品 |
久久精品在线免费观看 |
久久精品亚洲乱码伦伦中文 |
国产精品久久久久久久一区探花 |
亚洲免费在线观看视频 |
欧美在线一区二区三区 |
国产日韩欧美黄色 |
欧美激情一区二区三区在线 |
国产精品黄视频 |
老司机aⅴ在线精品导航 |
亚洲欧美日韩爽爽影院 |
欧美日韩专区在线 |
亚洲一区二区三区免费在线观看 |
亚洲人成久久 |
欧美精品亚洲精品 |
亚洲视频日本 |
亚洲深夜福利 |
亚洲国产婷婷综合在线精品 |
91久久综合 |
国产精品丝袜91 |
免费在线视频一区 |
国产精品福利网站 |
欧美国产日韩a欧美在线观看 |
国产精品爱啪在线线免费观看 |
久久成人一区二区 |
欧美视频一区 |
欧美激情aaaa |
亚洲人成人一区二区三区 |
久久美女性网 |
亚洲女同性videos |
欧美色精品在线视频 |
国产精品久久久久久久久久免费看 |
国产女人18毛片水18精品 |
国产精品视频免费观看www |
欧美精品v日韩精品v国产精品 |
欧美另类在线观看 |
黄色一区二区在线观看 |
中文欧美字幕免费 |
亚洲高清色综合 |
国产精品视频免费观看 |
一区二区三区福利 |
在线亚洲欧美 |
亚洲黄色高清 |
久久青草久久 |
欧美激情麻豆 |
亚洲福利专区 |
亚洲精品之草原avav久久 |
久久精品国产久精国产爱 |
欧美在线你懂的 |
国产视频在线观看一区二区 |
性欧美xxxx大乳国产app |
欧美中文字幕在线视频 |
国产日产欧美精品 |
欧美成人免费一级人片100 |
亚洲福利视频免费观看 |
中文精品视频一区二区在线观看 |
欧美精品videossex性护士 |
亚洲欧洲一区二区三区久久 |
一区二区三区国产盗摄 |
国产日韩欧美中文 |
免费观看一级特黄欧美大片 |
91久久久久久国产精品 |
亚洲女人天堂av |
亚洲第一主播视频 |
欧美日韩一区二区三区在线视频 |
亚洲一区二区伦理 |
亚洲高清视频一区 |
久久九九国产精品怡红院 |
亚洲精华国产欧美 |
国产欧美日韩91 |
欧美日韩中文字幕在线视频 |
久久精品99国产精品 |
国产精品99久久久久久久女警 |
美女999久久久精品视频 |
亚洲欧美在线免费观看 |
亚洲日产国产精品 |
一色屋精品视频免费看 |
国产日韩高清一区二区三区在线 |
欧美紧缚bdsm在线视频 |
久久亚洲影音av资源网 |
欧美在线精品一区 |
亚洲欧美一区二区在线观看 |
日韩香蕉视频 |
在线亚洲免费视频 |
亚洲精品日本 |
av成人免费在线 |
一区二区欧美亚洲 |
日韩一级大片 |
亚洲摸下面视频 |
性色av一区二区怡红 |
性欧美18~19sex高清播放 |
亚洲欧美国产毛片在线 |
欧美一区激情视频在线观看 |
久久不见久久见免费视频1 |
久久精品女人天堂 |
亚洲国产成人在线 |
欧美一区二区三区视频免费播放
|
亚洲人成绝费网站色www |
亚洲国产欧美一区二区三区同亚洲
|
亚洲国产精品va在看黑人 |
欧美在线中文字幕 |
亚洲午夜高清视频 |
国产精品视频免费 |
欧美中文字幕 |
久久99在线观看 |
亚洲第一天堂av |
亚洲精品欧美日韩 |
欧美日韩中文精品 |
亚洲欧美日韩综合 |
亚洲视频狠狠 |
韩日精品视频 |
亚洲福利专区 |
国产精品视频久久 |
欧美阿v一级看视频 |
欧美日韩中文精品 |
久久久亚洲人 |
免费人成精品欧美精品 |
日韩亚洲在线 |
国产精品久久久一本精品 |
亚洲午夜极品 |
日韩西西人体444www |
欧美午夜精品久久久久久人妖
|
一本久久综合亚洲鲁鲁五月天 |
可以看av的网站久久看 |
亚洲国产二区 |
亚洲色图自拍 |
国产亚洲欧洲一区高清在线观看 |
久久久久欧美精品 |
欧美国产欧美综合
|
伊大人香蕉综合8在线视 |
久久国产精品72免费观看 |
久久精品国产亚洲a |
亚洲欧美日韩在线不卡 |
欧美一区久久 |
中日韩美女免费视频网址在线观看 |
99视频一区二区三区 |
国内偷自视频区视频综合 |
亚洲国产国产亚洲一二三 |
国产目拍亚洲精品99久久精品 |
欧美韩日精品 |
亚洲三级视频 |
欧美黄色免费 |
99精品视频免费全部在线 |
这里只有精品在线播放 |
国产精品美女久久久免费 |
欧美中文字幕不卡 |
久久gogo国模啪啪人体图 |
欧美一激情一区二区三区 |
久久久久国色av免费看影院
|
在线视频免费在线观看一区二区 |
欧美一级午夜免费电影 |
亚洲永久视频 |
久久亚洲影院 |
国产一区在线看 |
欧美一二三视频 |
久久国产视频网站 |
激情久久久久久久久久久久久久久久 |
亚洲国产精品一区二区第一页
|
尤物网精品视频 |
欧美成va人片在线观看 |
国产欧美一区二区三区在线看蜜臀 |
欧美中文字幕不卡 |
日韩一级成人av |
欧美 日韩 国产 一区 |
欧美亚洲在线观看 |
99在线热播精品免费 |
精品电影一区 |
国产精品伦子伦免费视频 |