锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 64浣嶆寚鐨勬槸cpu閫氱敤瀵勫瓨鍣ㄧ殑鏁版嵁瀹藉害鏄?4浣嶇殑銆?/p> 聽 1 static_cast 鐢ㄦ硶錛歴tatic_cast < type-id > ( expression )聽聽聽聽 璇ヨ繍綆楃鎶奺xpression杞崲涓簍ype-id綾誨瀷錛屼絾娌℃湁榪愯鏃剁被鍨嬫鏌ユ潵淇濊瘉杞崲鐨勫畨鍏ㄦс傚畠涓昏鏈夊涓嬪嚑縐嶇敤娉曪細(xì) 鈶犵敤浜庣被灞傛緇撴瀯涓熀綾誨拰瀛愮被涔嬮棿鎸囬拡鎴栧紩鐢ㄧ殑杞崲銆?/p>
聽 榪涜涓婅杞崲錛堟妸瀛愮被鐨勬寚閽堟垨寮曠敤杞崲鎴愬熀綾昏〃紺猴級(jí)鏄畨鍏ㄧ殑錛?/p>
聽 榪涜涓嬭杞崲錛堟妸鍩虹被鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚瀛愮被琛ㄧず錛夋椂錛岀敱浜庢病鏈夊姩鎬佺被鍨嬫鏌ワ紝鎵浠ユ槸涓嶅畨鍏ㄧ殑銆?/p>
鈶$敤浜庡熀鏈暟鎹被鍨嬩箣闂寸殑杞崲錛屽鎶奿nt杞崲鎴恈har錛屾妸int杞崲鎴恊num銆傝繖縐嶈漿鎹㈢殑瀹夊叏鎬т篃瑕佸紑鍙戜漢鍛樻潵淇濊瘉銆?/p>
鈶㈡妸絀烘寚閽堣漿鎹㈡垚鐩爣綾誨瀷鐨勭┖鎸囬拡銆?/p>
鈶f妸浠諱綍綾誨瀷鐨勮〃杈懼紡杞崲鎴恦oid綾誨瀷銆?/p>
聽 娉ㄦ剰錛歴tatic_cast涓嶈兘杞崲鎺塭xpression鐨刢onst銆乿olitale銆佹垨鑰卂_unaligned灞炴с?/p>
聽 2 dynamic_cast 鐢ㄦ硶錛歞ynamic_cast < type-id > ( expression ) 璇ヨ繍綆楃鎶奺xpression杞崲鎴恡ype-id綾誨瀷鐨勫璞°俆ype-id蹇呴』鏄被鐨勬寚閽堛佺被鐨勫紩鐢ㄦ垨鑰卾oid *錛?/p>
濡傛灉type-id鏄被鎸囬拡綾誨瀷錛岄偅涔坋xpression涔熷繀欏繪槸涓涓寚閽堬紝濡傛灉type-id鏄竴涓紩鐢紝閭d箞expression涔熷繀欏繪槸涓涓紩鐢ㄣ?/p>
聽 dynamic_cast涓昏鐢ㄤ簬綾誨眰嬈¢棿鐨勪笂琛岃漿鎹㈠拰涓嬭杞崲錛岃繕鍙互鐢ㄤ簬綾諱箣闂寸殑浜ゅ弶杞崲銆?/p>
鍦ㄧ被灞傛闂磋繘琛屼笂琛岃漿鎹㈡椂錛宒ynamic_cast鍜宻tatic_cast鐨勬晥鏋滄槸涓鏍風(fēng)殑錛?/p>
鍦ㄨ繘琛屼笅琛岃漿鎹㈡椂錛宒ynamic_cast鍏鋒湁綾誨瀷媯(gè)鏌ョ殑鍔熻兘錛屾瘮static_cast鏇村畨鍏ㄣ?/p>
class B{ public: 聽聽聽聽聽聽 int m_iNum; 聽聽聽聽聽聽 virtual void foo(); }; 聽 class D:public B{ 聽聽聽 public: 聽聽聽聽聽聽 char *m_szName[100]; }; 聽 void func(B *pb){ 聽聽聽 D *pd1 = static_cast<D *>(pb); 聽聽聽 D *pd2 = dynamic_cast<D *>(pb); } 聽 鍦ㄤ笂闈㈢殑浠g爜孌典腑錛屽鏋減b鎸囧悜涓涓狣綾誨瀷鐨勫璞★紝pd1鍜宲d2鏄竴鏍風(fēng)殑錛屽茍涓斿榪欎袱涓寚閽堟墽琛孌綾誨瀷鐨勪換浣曟搷浣滈兘鏄畨鍏ㄧ殑錛?/p>
浣嗘槸錛屽鏋減b鎸囧悜鐨勬槸涓涓狟綾誨瀷鐨勫璞★紝閭d箞pd1灝嗘槸涓涓寚鍚戣瀵硅薄鐨勬寚閽堬紝瀵瑰畠榪涜D綾誨瀷鐨勬搷浣滃皢鏄笉瀹夊叏鐨勶紙濡傝闂甿_szName錛夛紝 鑰宲d2灝嗘槸涓涓┖鎸囬拡銆?/p>
聽 鍙﹀瑕佹敞鎰忥細(xì)B瑕佹湁铏氬嚱鏁幫紝鍚﹀垯浼?xì)缂栬瘧鍑洪敊锛泂tatic_cast鍒欐病鏈夎繖涓檺鍒躲?/p>
榪欐槸鐢變簬榪愯鏃剁被鍨嬫鏌ラ渶瑕佽繍琛屾椂綾誨瀷淇℃伅錛岃岃繖涓俊鎭瓨鍌ㄥ湪綾葷殑铏氬嚱鏁拌〃錛?/p>
鍏充簬铏氬嚱鏁拌〃鐨勬蹇碉紝璇︾粏鍙<Inside c++ object model>錛変腑錛屽彧鏈夊畾涔変簡铏氬嚱鏁扮殑綾繪墠鏈夎櫄鍑芥暟琛紝 娌℃湁瀹氫箟铏氬嚱鏁扮殑綾繪槸娌℃湁铏氬嚱鏁拌〃鐨勩?/p>
聽 鍙﹀錛宒ynamic_cast榪樻敮鎸佷氦鍙夎漿鎹紙cross cast錛夈傚涓嬩唬鐮佹墍紺恒?/p>
class A{ public: 聽聽聽聽聽聽聽 int m_iNum; 聽聽聽聽聽聽聽 virtual void f(){} }; 聽 class B:public A{ }; 聽 class D:public A{ }; 聽 void foo(){ 聽聽聽 B *pb = new B; 聽聽聽 pb->m_iNum = 100; 聽 聽聽聽 D *pd1 = static_cast<D *>(pb);聽聽聽 //compile error 聽聽聽 D *pd2 = dynamic_cast<D *>(pb); //pd2 is NULL 聽聽聽 delete pb; } 聽 鍦ㄥ嚱鏁癴oo涓紝浣跨敤static_cast榪涜杞崲鏄笉琚厑璁哥殑錛屽皢鍦ㄧ紪璇戞椂鍑洪敊錛涜屼嬌鐢?dynamic_cast鐨勮漿鎹㈠垯鏄厑璁哥殑錛岀粨鏋滄槸絀烘寚閽堛?/p>
聽 3 reinterpret_cast 鐢ㄦ硶錛歳einterpret_cast<type-id> (expression) type-id蹇呴』鏄竴涓寚閽堛佸紩鐢ㄣ佺畻鏈被鍨嬨佸嚱鏁版寚閽堟垨鑰呮垚鍛樻寚閽堛?/p>
瀹冨彲浠ユ妸涓涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝涔熷彲浠ユ妸涓涓暣鏁拌漿鎹㈡垚涓涓寚閽堬紙鍏堟妸涓涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝 鍦ㄦ妸璇ユ暣鏁拌漿鎹㈡垚鍘熺被鍨嬬殑鎸囬拡錛岃繕鍙互寰楀埌鍘熷厛鐨勬寚閽堝鹼級(jí)銆?/p>
聽 璇ヨ繍綆楃鐨勭敤娉曟瘮杈冨銆?/p>
聽 (static_cast .涓? reinterpret_cast姣旇緝錛岃涓嬮潰 ) 聽 4 const_cast 鐢ㄦ硶錛歝onst_cast<type_id> (expression) 璇ヨ繍綆楃鐢ㄦ潵淇敼綾誨瀷鐨刢onst鎴杤olatile灞炴с傞櫎浜哻onst 鎴杤olatile淇グ涔嬪錛?type_id鍜宔xpression鐨勭被鍨嬫槸涓鏍風(fēng)殑銆?/p>
甯擱噺鎸囬拡琚漿鍖栨垚闈炲父閲忔寚閽堬紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱 甯擱噺寮曠敤琚漿鎹㈡垚闈炲父閲忓紩鐢紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱甯擱噺瀵硅薄琚漿鎹㈡垚闈炲父閲忓璞°?/p>
聽 Voiatile鍜宑onst綾昏瘯銆備婦濡備笅涓渚嬶細(xì) class B{ public: 聽聽聽聽 int m_iNum; } void foo(){ const B b1; b1.m_iNum = 100;聽聽聽聽聽聽聽聽聽聽聽 //comile error B b2 = const_cast<B>(b1); b2. m_iNum = 200;聽聽聽聽聽聽聽聽聽聽 //fine } 涓婇潰鐨勪唬鐮佺紪璇戞椂浼?xì)鎶ラ敊锛屽洜湄?fù)b1鏄竴涓父閲忓璞★紝涓嶈兘瀵瑰畠榪涜鏀瑰彉錛?/p>
浣跨敤const_cast鎶婂畠杞崲鎴愪竴涓父閲忓璞★紝灝卞彲浠ュ瀹冪殑鏁版嵁鎴愬憳浠繪剰鏀瑰彉銆傛敞鎰忥細(xì)b1鍜宐2鏄袱涓笉鍚岀殑瀵硅薄銆?/p>
聽 == =========================================== 聽 == dynamic_cast .vs. static_cast == =========================================== 聽 class B { ... }; class D : public B { ... }; 聽 void f(B* pb) { 聽 D* pd1 = dynamic_cast<D*>(pb); 聽 D* pd2 = static_cast<D*>(pb); } 聽 If pb really points to an object of type D, then pd1 and pd2 will get the same value. They will also get the same value if pb == 0. 聽 If pb points to an object of type B and not to the complete D class, then dynamic_cast will know enough to return zero. However, static_cast relies on the programmer鈥檚 assertion that pb points to an object of type D and simply returns a pointer to that supposed D object. 聽 鍗砫ynamic_cast鍙敤浜庣戶鎵夸綋緋諱腑鐨勫悜涓嬭漿鍨嬶紝鍗沖皢鍩虹被鎸囬拡杞崲涓烘淳鐢熺被鎸囬拡錛屾瘮static_cast鏇翠弗鏍兼洿瀹夊叏銆俤ynamic_cast鍦ㄦ墽琛屾晥鐜囦笂姣攕tatic_cast瑕佸樊涓浜涳紝浣唖tatic_cast鍦ㄦ洿瀹戒笂鑼冨洿鍐呭彲浠ュ畬鎴愭槧灝勶紝榪欑涓嶅姞闄愬埗鐨勬槧灝勪即闅忕潃涓嶅畨鍏ㄦс俿tatic_cast瑕嗙洊鐨勫彉鎹㈢被鍨嬮櫎綾誨眰嬈$殑闈欐佸鑸互澶栵紝榪樺寘鎷棤鏄犲皠鍙樻崲銆佺獎(jiǎng)鍖栧彉鎹?榪欑鍙樻崲浼?xì)瀵艰嚧瀵硅薄鍒囩?涓㈠け淇℃伅)銆佺敤VOID*鐨勫己鍒跺彉鎹€侀殣寮忕被鍨嬪彉鎹㈢瓑... 聽 == =========================================== == static_cast .vs. reinterpret_cast == ================================================ 聽 reinterpret_cast鏄負(fù)浜嗘槧灝勫埌涓涓畬鍏ㄤ笉鍚岀被鍨嬬殑鎰忔濓紝榪欎釜鍏抽敭璇嶅湪鎴戜滑闇瑕佹妸綾誨瀷鏄犲皠鍥炲師鏈夌被鍨嬫椂鐢ㄥ埌瀹冦傛垜浠槧灝勫埌鐨勭被鍨嬩粎浠呮槸涓轟簡鏁呭紕鐜勮櫄鍜屽叾浠栫洰鐨勶紝榪欐槸鎵鏈夋槧灝勪腑鏈鍗遍櫓鐨勩?榪欏彞璇濇槸C++緙栫▼鎬濇兂涓殑鍘熻瘽) 聽 static_cast 鍜?reinterpret_cast 鎿嶄綔絎︿慨鏀逛簡鎿嶄綔鏁扮被鍨嬨傚畠浠笉鏄簰閫嗙殑錛?static_cast 鍦ㄧ紪璇戞椂浣跨敤綾誨瀷淇℃伅鎵ц杞崲錛屽湪杞崲鎵ц蹇呰鐨勬嫻?璇稿鎸囬拡瓚婄晫璁$畻, 綾誨瀷媯(gè)鏌?. 鍏舵搷浣滄暟鐩稿鏄畨鍏ㄧ殑銆傚彟涓鏂歸潰錛況einterpret_cast 浠呬粎鏄噸鏂拌В閲婁簡緇欏嚭鐨勫璞$殑姣旂壒妯″瀷鑰屾病鏈夎繘琛屼簩榪涘埗杞崲錛?渚嬪瓙濡備笅錛?/p>
聽 int n=9; double d=static_cast < double > (n); 聽 涓婇潰鐨勪緥瀛愪腑, 鎴戜滑灝嗕竴涓彉閲忎粠 int 杞崲鍒?double銆?榪欎簺綾誨瀷鐨勪簩榪涘埗琛ㄨ揪寮忔槸涓嶅悓鐨勩?瑕佸皢鏁存暟 9 杞崲鍒?鍙岀簿搴︽暣鏁?9錛宻tatic_cast 闇瑕佹紜湴涓哄弻綺懼害鏁存暟 d 琛ヨ凍姣旂壒浣嶃傚叾緇撴灉涓?9.0銆傝宺einterpret_cast 鐨勮涓哄嵈涓嶅悓: 聽 int n=9; double d=reinterpret_cast<double & > (n); 聽 榪欐, 緇撴灉鏈夋墍涓嶅悓. 鍦ㄨ繘琛岃綆椾互鍚? d 鍖呭惈鏃犵敤鍊? 榪欐槸鍥犱負(fù) reinterpret_cast 浠呬粎鏄鍒?n 鐨勬瘮鐗逛綅鍒?d, 娌℃湁榪涜蹇呰鐨勫垎鏋? 聽 鍥犳, 浣犻渶瑕佽皚鎱庝嬌鐢?reinterpret_cast. Wt(闊沖悓'witty')鏄竴涓狢++搴擄紝鐢ㄤ互寮鍙戜氦浜掓eb搴旂敤銆?/p>
Wt鐨凙PI浠idget涓轟腑蹇?/b>錛屽皢妗岄潰GUI APIs鐨勮壇濂芥祴璇曟ā寮忓紩鍏eb寮鍙戙?Wt涓哄紑鍙戣呮彁渚涗簡鍑犱箮鎵鏈塛eb瀹炵幇緇嗚妭鐨勬娊璞★紝鍏朵腑鍖呮嫭浜嬩歡澶勭悊銆佸浘鍍忔敮鎸併佷紭闆呴檷綰э紙鎴栨笎榪涘寮猴級(jí)銆佸強(qiáng)鑹ソ鐨刄RL澶勭悊銆?/p>
涓庡叾浠栬澶氬熀浜庨〉闈㈢殑寮鍙戞鏋剁浉姣旓紝W(xué)t鍙互鍒涘緩鐘舵佸寲鐨勫簲鐢紝鍚屾椂瀹炵幇浜嗛珮搴︾殑浜や簰鎬у拰鍙闂э紱鍏朵氦浜掓т綋鐜板湪Wt鍙互緇煎悎浣跨敤鍚勭鎶鏈紝濡侫jax絳夛紱鍏跺彲璁塊棶鎬т綋鐜板湪Wt鍙互浣垮簲鐢ㄥ湪蹇呰鐨勬椂鍊欐敮鎸佺函HTML嫻忚鍣紱榪欎簺鐗規(guī)х殑鑾峰緱鍏呭垎鍒╃敤浜嗚嚜鍔ㄧ殑浼橀泤闄嶇駭鎴栨笎榪涘寮?/b>銆?/p>
Wt搴撹繕鑷甫浜嗗簲鐢ㄦ湇鍔″櫒紼嬪簭錛屽彲閰嶇疆涓虹嫭绔嬬殑Web鏈嶅姟鍣紝褰撶劧涔熷厑璁?dāng)R氳繃FastCGI榪炲悓鍏朵粬Web鏈嶅姟鍣ㄨ繘琛屾暣鍚堛?/p>
鍩轟簬欏甸潰鐨勫紑鍙戞鏋訛紙濡侾HP銆丣SP/JSF銆丷uby on Rails絳夛級(jí)娌℃湁瀹炵幇搴曞眰鍩虹鎶鏈殑鎶借薄錛岃繖浜涙妧鏈寘鎷琀TML/XHTML銆丣avaScript銆丆SS銆丄jax銆丗orms銆丏HTML 銆丼VG/VML/Canvas絳夈傛樉鐒?dòng)灱屽熮Z簬欏甸潰鐨勫紑鍙戞鏋跺繀欏昏姹傚紑鍙戣呴殢鏃剁啛鎮(zhèn)夊拰鎺屾彙榪欎簺鍩烘湰鎶鏈紝鍚屾椂褰撴祻瑙堝櫒涓嶆敮鎸佹椂錛岃繕瑕佷負(fù)搴旂敤鐨勪紭闆呴檷綰ц礋璐c傚彟澶栵紝濡傛灉搴旂敤閲囧彇鏃╂湡HTML欏甸潰涓轟腑蹇冪殑璁捐妯″紡錛屽紑鍙戣呬笉浠呰瀹炵幇鎺у埗鍣ㄤ互鍛婅瘔鐢ㄦ埛濡備綍浠庝竴涓〉闈㈣煩杞埌鍙︿竴涓〉闈紝鑰屼笖榪樿鍦ㄩ噰鐢ㄤ竴浜涢珮綰jax鎶鏈椂鎵嬪伐璁捐鍜岀淮鎶ゅ鎴風(fēng)涓庢湇鍔″櫒绔殑閫氳銆?/p>
鍙︿竴鏂歸潰錛屽氨綆楁槸綰補(bǔ)鐨凙jax妗嗘灦錛屼篃瑕佹眰寮鍙戣呴氳繃綣佹潅鐨凧avaScript緙栫▼鏉ュ鐞嗘祻瑙堝櫒鐨勬紓琛屼負(fù)鍜屽鎴風(fēng)涓庢湇鍔″櫒绔棿鐨勫畨鍏ㄩ氳錛岃繖浜涘鐞嗕換浣曚漢閮戒笉鑳借煩榪囧幓涓嶄笌鐞嗕細(xì)銆傚悓鏃訛紝榪欎簺搴旂敤閫氬父涓嶈兘絎﹀悎鍙闂х殑鍘熷垯錛屼篃涓嶈兘寰堝ソ琚悳绱㈡満鍣ㄤ漢绱㈠紩鍒般?/p>
瀹夊叏鏂歸潰錛岀敓鎴怘TML鎴栧~鍏匟TML妯$増寰堝鏄撳鑷村畨鍏ㄩ棶棰橈紝濡?a >璺ㄧ珯鑴氭湰錛圶SS錛?鍜?a > 璺ㄧ珯璇鋒眰浼狅紙CSRF錛?/a>錛沊SS闂涓鑸敱錛堢枏蹇斤級(jí)鍏佽宓屽叆JavaScript浠g爜寮曡搗錛?CSRF闂涓鑸敱錛堢浉淇★級(jí)Cookies錛堝彲錛変綔涓鴻璇佹墜孌靛紩璧楓備綔涓哄紑鍙戣咃紝榪欎簺瀹夊叏闂灝嗘槸寰堥毦閬垮厤鐨勶紝鍥犱負(fù)鎴戜滑鏈夋椂闇瑕佸厑璁哥敤鎴鋒彃鍏ヨ嚜宸辯殑JavaScript 浠g爜鏉ュ疄鐜版煇浜涘姛鑳斤紝浣嗗紑鍙戞鏋舵湰韜嵈娌℃彁渚涚粰鎴戜滑榪囨護(hù)鏈哄埗銆?/p>
鐩稿弽錛屼嬌鐢╓t鏉ラ儴緗瞁eb搴旂敤鍙互瀹屽叏鐢–++鏉ュ紑鍙戯紝W(xué)t鑷姩浜х敓鎵蹇呴』鐨?HTML/XHTML銆丆SS銆丣avascript銆丆GI銆丼VG/VML/Canvas鍜孉jax浠g爜錛涗笌姝ゅ悓鏃訛紝浠g爜鐨勫畨鍏ㄦу拰嫻忚鍣ㄥ吋瀹規(guī)х瓑闂閮藉皢杞氦緇橶t銆備緥濡傦紝鍦ㄥ彲鑳界殑鎯呭喌涓嬶紝 Wt灝嗘渶澶ч檺搴︾殑浣跨敤JavaScript鍜孉jax錛屼絾鍦ˋjax鍔熻兘鍙楅檺鏃訛紝W(xué)t涔熻兘淇濊瘉緋葷粺鍔熻兘榪愯姝e父銆傚叾鍘熺悊鏄疻t灝嗗厛鍚敤綰疕TML/CGI搴旂敤錛岄殢鍚庡湪鍙兘鐨勬儏鍐典笅娓愯繘澧炲己鑷矨jax搴旂敤銆傚彟澶栵紝W(xué)t鎻愪緵浜嗗唴緗殑瀹夊叏鎬ц冭檻銆?/p>
]]>
鑰屽浜庨潪int琛岋紝鐩墠涓烘錛屾墍鏈夌殑綾誨瀷鍒嗛厤鐨勫瓧鑺傛暟閮芥槸鍏煎鐨勶紝鍗充笉鍚屽鉤鍙板浜庡悓涓涓被鍨嬪垎閰嶇浉鍚岀殑瀛楄妭鏁幫紒錛?br />
寤鴻錛氬湪浠g爜涓敖閲忛伩鍏嶄嬌鐢╥nt綾誨瀷錛屾牴鎹笉鍚岀殑闇瑕佸彲浠ョ敤short,long,unsigned int 絳変唬鏇褲?br />
涓嬮潰鏄悇涓被鍨嬩竴瑙堣〃銆愯漿銆?br />鏁版嵁綾誨瀷鍚嶇О 瀛楄妭鏁?/strong> 鍒悕 鍙栧艱寖鍥?/font> int * signed,signed int 鐢?a target="_blank">鎿嶄綔緋葷粺鍐沖畾錛屽嵆涓庢搷浣滅郴緇熺殑錛傚瓧闀匡紓鏈夊叧 unsigned int * unsigned 鐢辨搷浣滅郴緇熷喅瀹氾紝鍗充笌鎿嶄綔緋葷粺鐨勶紓瀛楅暱錛傛湁鍏?/font> __int8 1 char,signed char 鈥?28 鍒?127 __int16 2 short,short int,signed short int 鈥?2,768 鍒?32,767 __int32 4 signed,signed int 鈥?,147,483,648 鍒?2,147,483,647 __int64 8 鏃?/font> 鈥?,223,372,036,854,775,808 鍒?9,223,372,036,854,775,807 bool 1 鏃?/font> false 鎴?true char 1 signed char 鈥?28 鍒?127 unsigned char 1 鏃?/font> 0 鍒?255 short 2 short int,signed short int 鈥?2,768 鍒?32,767 unsigned short 2 unsigned short int 0 鍒?65,535 long 4 long int,signed long int 鈥?,147,483,648 鍒?2,147,483,647 long long 8 none (but equivalent to __int64) 鈥?,223,372,036,854,775,808 鍒?9,223,372,036,854,775,807 unsigned long 4 unsigned long int 0 鍒?4,294,967,295 enum * 鏃?/font> 鐢辨搷浣滅郴緇熷喅瀹氾紝鍗充笌鎿嶄綔緋葷粺鐨勶紓瀛楅暱錛傛湁鍏?/font> float 4 鏃?/font> 3.4E +/- 38 (7 digits) double 8 鏃?/font> 1.7E +/- 308 (15 digits) long double 8 鏃?/font> 1.7E +/- 308 (15 digits) wchar_t 2 __wchar_t 0 鍒?65,535 綾誨瀷鏍囪瘑絎?/td> 綾誨瀷璇存槑 闀垮害
錛堝瓧鑺傦級(jí)鑼冨洿 澶囨敞 char 瀛楃鍨?/td> 1 -128 ~ 127 -27 ~ (27 -1) unsigned char 鏃犵瀛楃鍨?/td> 1 0 ~ 255 0 ~ (28 -1) short int 鐭暣鍨?/td> 2 -32768 ~ 32767 2-15 ~ (215 - 1) unsigned short int 鏃犵鐭暣鍨?/td> 2 0 ~ 65535 0 ~ (216 - 1) int 鏁村瀷 4 -2147483648 ~ 2147483647 -231 ~ (231 - 1) unsigned int 鏃犵鏁村瀷 4 0 ~ 4294967295 0 ~ (232-1) float 瀹炲瀷錛堝崟綺懼害錛?/td> 4 1.18*10-38 ~ 3.40*1038 7浣嶆湁鏁堜綅 double 瀹炲瀷錛堝弻綺懼害錛?/td> 8 2.23*10-308 ~ 1.79*10308 15浣嶆湁鏁堜綅 long double 瀹炲瀷錛堥暱鍙岀簿搴︼級(jí) 10 3.37*10-4932 ~ 1.18*104932 19浣嶆湁鏁堜綅
]]>
]]>
]]>
]]>
/*++
TCP Header Format
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽 0聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 1聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 2聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 3聽聽聽
聽聽聽 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1聽
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
聽聽 |聽聽聽聽聽聽聽聽聽 Source Port聽聽聽聽聽聽聽聽聽 |聽聽聽聽聽聽 Destination Port聽聽聽聽聽聽聽 |
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
聽聽 |聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Sequence Number聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
聽聽 |聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Acknowledgment Number聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
聽聽 |聽 Data |聽聽聽聽聽聽聽聽聽聽 |U|A|P|R|S|F|聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽 | Offset| Reserved聽 |R|C|S|S|Y|I|聽聽聽聽聽聽聽聽聽聽聽 Window聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽 |聽聽聽聽聽聽 |聽聽聽聽聽聽聽聽聽聽 |G|K|H|T|N|N|聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
聽聽 |聽聽聽聽聽聽聽聽聽聽 Checksum聽聽聽聽聽聽聽聽聽聽聽 |聽聽聽聽聽聽聽聽 Urgent Pointer聽聽聽聽聽聽聽 |
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
聽聽 |聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Options聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 |聽聽聽 Padding聽聽聽 |
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
聽聽 |聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 data聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 |
聽聽 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
attached:瀹屾暣闄勪歡
]]>
/**/
/*
**********************************************************************
*/
//
聽int聽a2i(const聽char聽*s)聽鍑芥暟鍘熷艦聽
//
鍔熻兘:聽鎶妔鎵鎸囧悜鐨勫瓧絎︿覆杞崲鎴恑nt綾誨瀷;
//
榪斿洖鍊鹼細(xì)瀛楃涓茬殑杞崲鍊箋?br />
//
//
聽double聽a2f(const聽char聽*s)聽鍑芥暟鍘熷艦聽
//
鍔熻兘:聽鎶妔鎵鎸囧悜鐨勫瓧絎︿覆杞崲鎴恉ouble綾誨瀷;
//
榪斿洖鍊鹼細(xì)瀛楃涓茬殑杞崲鍊箋?/span>
/**/
/*
**********************************************************************
*/
int
聽a2i(
const
聽
char
聽
*
s)
{
聽聽聽聽
int
聽sign
=
1
,num
=
0
;聽
聽聽聽聽
if
(
*
s
==
'
-
'
)
聽聽聽聽聽聽聽聽sign
=-
1
;
聽聽聽聽
else
聽
if
(
*
s
==
'
+
'
)
聽聽聽聽聽聽聽聽sign
=
1
;
聽聽聽聽s
++
;
聽聽聽聽
while
((
*
s)
!=
'
\0
'
)
聽聽聽聽
{
聽聽聽聽聽聽聽聽num
=
num
*
10
+
(
*
s
-
'
0
'
);
聽聽聽聽聽聽聽聽s
++
;
聽聽聽聽}
聽聽聽聽
聽聽聽聽
return
聽num
*
sign;
}
double
聽a2f(
const
聽
char
聽
*
s)
{
聽聽聽聽
bool
聽bDot
=
false
;
聽聽聽聽
double
聽result
=
0
;
聽聽聽聽
int
聽sign
=
1
;
聽聽聽聽
if
聽(
*
s
==
'
-
'
)
聽聽聽聽
{
聽聽聽聽聽聽聽聽sign
=-
1
;
聽聽聽聽}
聽聽聽聽
else
聽
if
(
*
s
==
'
+
'
)
聽聽聽聽
{
聽聽聽聽聽聽聽聽sign
=
1
;
聽聽聽聽}
聽聽聽聽s
++
;
聽聽聽聽
聽聽聽聽
double
聽temp
=
1
;
聽聽聽聽
while
聽((
*
s)
!=
'
\0
'
)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
if
(
*
s
==
'
.
'
)
聽聽聽聽聽聽聽聽
{bDot
=
true
;s
++
;}
聽聽聽聽聽聽聽聽
if
聽(
!
bDot)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽result
=
result
*
10
+
(
*
s
-
'
0
'
);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
else
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽temp
*=
10
;
聽聽聽聽聽聽聽聽聽聽聽聽result
=
result
+
(
*
s
-
'
0
'
)
/
temp;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽s
++
;
聽聽聽聽}
聽聽聽聽
return
聽sign
*
result;
}
]]>浜や簰鎬с佸畨鍏ㄦс佸彲璁塊棶鎬?/h4>
鍏稿瀷搴旂敤涓鵑殔錛?/h4>
浣跨敤Wt鐨勫叾浠栧ソ澶?/h4>
]]>
鏈榪戝涔?fàn)PE鏂囦歡錛屻婅蔣浠跺姞瀵嗘妧鏈唴騫曘嬬涓绔犳湁璇︾粏鐨勮瑙?br />涓嶈繃鐪嬩簡鍗婂ぉ鎼炵殑澶村埌鏅曚簡錛岀粨鏋勫お澶氾紝鏈鍚庤嚜宸辨煡鐪媁INNT.H澶存枃浠?br />鎶奝E澶翠腑鐨勭粨鏋勭敾浜嗕竴寮犲浘錛屽湪鐪嬩功瀛︿範(fàn)鐨勬椂鍊欒竟鐪嬩功杈圭湅鍥懼涔?fàn)鐞嗚В杈冨揩锛?br />鏈変粈涔堥敊璇楂樻墜鎸囨錛岃阿璋紒
鍏舵寮虹儓寤鴻澶у鐪嬨婅蔣浠跺姞瀵嗘妧鏈唴騫曘嬬涓绔犻厤鍚堟湰鍥撅紝鏁堟灉涓嶉敊鍝︼紒
闄勪笂鑷繁鍐欑殑涓涓狿E鏂囦歡鏌ョ湅鍣紝綆鍗曘傞噷闈㈢敤浜嗕竴浜涖婅蔣浠跺姞瀵嗘妧鏈唴騫曘?br />鍏夌洏涓殑浠g爜錛岀敤MFC鍐欑殑錛?br />閿欒鍦ㄦ墍闅懼厤錛屾伋璇峰ぇ瀹舵寚姝o紒
PE鏂囦歡鏌ョ湅鍣ㄦ簮鐮?/a>
杞嚜錛?a >http://bbs.pediy.com/showthread.php?t=62693&highlight=rar
]]>
#pragma聽data_seg(
"
.mydata
"
)
POINT聽pPoint
=
{
0
,
0
}
;
//
must聽initialize
#pragma聽data_seg()
#pragma聽comment(linker,
"
/SECTION:.mydata,RWS
"
)
涓嬮潰鐨勮〃鏍兼槸鎴戞暣鐞嗙殑 BMP 鏂囦歡澶寸殑鏍煎紡銆?/span>
鏂逛究澶у鏌ヨ銆?/span>
聽
Bmp 鐨勬枃浠跺ご鏄?/span> 54 , 浠ヤ笅閮芥槸 24 bit,
濡傛灉 鍥懼儚澶у皬鏄?/span> 720 * 480 , 閭d箞鏂囦歡澶у皬鏄?/span> : 54 + 720 * 480 *3 寰堝ソ鐞嗚В ,
濡傛灉
鍥懼儚澶у皬鏄?/span>
333 * 333
閭d箞鏂囦歡澶у皬灝變笉鏄?/span>
: 54 + 333 * 333 *3
浜?/span>
,
濂囨箞
?,
聽聽聽鎬葷畻寮曞嚭楂樹漢浜嗭紝鎴戝氨鍏竷絳旀鍚э細(xì)聽
聽聽聽濡傛灉鍥懼儚澶у皬鏄?/span>聽1*7聽 閭d箞鏂囦歡澶у皬灝辨槸: 54聽+聽1*7*3 + 7*n聽浜?/span>,
聽聽聽濡傛灉鍥懼儚澶у皬鏄?/span>聽3*5聽 閭d箞鏂囦歡澶у皬灝辨槸: 54聽+聽3*5*3 +聽5*n聽浜?/span>,
聽聽聽濡傛灉鍥懼儚澶у皬鏄?/span>聽11*77聽 閭d箞鏂囦歡澶у皬灝辨槸: 54聽+聽11*77*3 +聽77*n聽浜?/span>,
聽聽聽鎬諱箣鏄鏋渨idth * high * 3聽 + high * n聽錛侊紳 4鐨勫嶆暟錛?閭d箞鏂囦歡澶у皬灝辨槸 54聽+聽聽width * high * 3 + high*n聽 浜嗐?br />
聽聽聽n鐨勫彇鍊艱寖鍥存槸 0 锝烇綖3聽聽聽鐩村埌綆椾笅鏉ワ紝size鏄?鐨勫嶆暟銆?br />
杞嚜錛?a >http://www.cnitblog.com/dvb-dvb/archive/2009/07/06/59865.aspx
In Windows XP, Windows Server 2003, and earlier versions of the Windows operating system, all services run in the same session as the first user who logs on to the console.聽 This session is called Session 0. Running services and user applications together in Session 0 poses a security risk because services run at elevated privilege and therefore are targets for malicious agents who are looking for a means to elevate their own privilege level.
The Microsoft Windows Vista operating system mitigates this security risk by isolating services in Session 0 and making Session 0 non-interactive.聽 In Windows Vista (and Windows Longhorn Server), only system processes and services run in Session 0.聽 The user logs on to Session 1.聽 On聽Windows Longhorn Server,聽subsequent users log on to subsequent sessions (Session 2, Session 3 etc).聽 This means that services never run in the same session as users' applications and are therefore protected from attacks that originate in application code.
Specific examples of affected driver classes include:
Application classes affected by this feature:
Sessions in Windows XP / 2003
OK - so we've already mentioned that Session 0 poses a security risk because services run at elevated privilege.聽 The first user on the console also runs in Session 0 - which provides the most common attack vector used to target unsuspecting users.
Sessions in Windows Vista
In Windows Vista, Session 0 is created for services and user-mode drivers.聽 Session 1 is created for the first user who logs in.聽 Applications for this user run in Session 1.
OK - so what聽could this actually look like in a real world scenario?聽 Consider the following example - if a service belonging to an application generates a UI element in Session 0聽- for example a dialog box waiting for the user to click "OK" or "Cancel", the application is now waiting on the service, and the UI is not displayed in the user session.聽 From the user perspective, the application appears to be hung, when in actual fact it is performing quite normally, and patiently waiting for a user response that the user cannot see!
As you can imagine - this presents a problem for users, administrators and developers.聽 However, there are some quick mitigating factors to consider.
When testing applications for compatibility with Windows Vista, consider the following test scenarios:
Finally, you can leverage the following Windows聽Vista capability solutions:
And that will do it for a quick look at how Session 0 isolation affects Application Compatibility in Windows Vista.聽 The links below contain more information on some of the concepts discussed above.聽 Until next time ...
#include聽
<
stdio.h
>
#include聽
<
windows.h
>
void
聽main()
{
//
鍙栧緱涓繪ā鍧楃殑妯″潡鍙ユ焺錛堝嵆榪涚▼妯″潡鍩哄湴鍧錛?/span>
HMODULE聽hMod聽
=
聽GetModuleHandle(NULL);
//
鎶婅繘紼嬪熀鍧璧嬬粰pDosHeader,鍗寵搗濮嬪熀鍧灝辨槸PE鐨処MAGE_DOS_HEADER
IMAGE_DOS_HEADER
*
聽pDosHeader聽
=
聽(IMAGE_DOS_HEADER
*
)hMod;
//
瀹氫綅鍒癙E聽HEADER
//
鍩哄潃hMod鍔犱笂IMAGE_DOS_HEADER緇撴瀯鐨別_lfanew鎴愬憳鍒拌揪IMAGE_NT_HEADERS
//
NT鏂囦歡澶寸殑鍓?瀛楄妭鏄枃浠剁鍚?"PE00"聽瀛楃涓?,鐒跺悗鏄?0瀛楄妭鐨処MAGE_FILE_HEADER緇撴瀯
//
鍗沖埌杈綢MAGE_OPTIONAL_HEADER緇撴瀯鐨勫湴鍧,鑾峰彇浜嗕竴涓寚鍚慖MAGE_OPTIONAL_HEADER緇撴瀯浣撶殑鎸囬拡
IMAGE_OPTIONAL_HEADER聽
*
聽pOptHeader聽
=
(IMAGE_OPTIONAL_HEADER聽
*
)((BYTE
*
)hMod聽
+
聽pDosHeader
->
e_lfanew聽
+
聽
24
);
//
瀹氫綅鍒板鍏ヨ〃
//
閫氳繃IMAGE_OPTIONAL_HEADER緇撴瀯涓殑DataDirectory緇撴瀯鏁扮粍涓殑絎簩涓垚鍛樹腑鐨?br />
21
//
VirturalAddress瀛楁瀹氫綅鍒癐MAGE_IMPORT_DESCRIPTOR緇撴瀯鐨勮搗濮嬪湴鍧
//
鍗寵幏寰楀鍏ヨ〃涓涓涓狪MAGE_IMPORT_DESCRIPTOR緇撴瀯鐨勬寚閽?瀵煎叆琛ㄩ鍦板潃)
IMAGE_IMPORT_DESCRIPTOR
*
聽pImportDesc聽
=
聽(IMAGE_IMPORT_DESCRIPTOR
*
)
((BYTE
*
)hMod聽
+
聽pOptHeader
->
DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
while
(pImportDesc
->
FirstThunk)
{
//
閬嶅巻緇撴瀯鐨凮riginalFirstThunk瀛楁鎵鎸囧悜鐨処MAGE_IMPORT_BY_NAME緇撴瀯寰楀埌瀵煎嚭鍑芥暟鍚?br />
29
//
閬嶅巻IMAGE_IMPORT_DESCRIPTOR緇撴瀯鐨凢irstThunk鏁扮粍寰楀埌姣忎釜鍑芥暟鐨勫湴鍧
//
瀵煎嚭妯″潡鐨勫悕縐?/span>
char
*
聽pszDllName聽
=
聽(
char
*
)((BYTE
*
)hMod聽
+
pImportDesc
->
Name);
printf(
"
\n妯″潡鍚嶇О錛?s聽\n
"
,聽pszDllName);
//
聽涓涓狪MAGE_THUNK_DATA灝辨槸涓涓弻瀛楋紝瀹冩寚瀹氫簡涓涓鍏ュ嚱鏁?/span>
IMAGE_THUNK_DATA
*
聽pThunk聽
=
聽(IMAGE_THUNK_DATA
*
)
((BYTE
*
)hMod聽
+
聽pImportDesc
->
OriginalFirstThunk);
int
聽n聽
=
聽
0
;
while
(pThunk
->
u1.Function)
{
//
聽鍙栧緱鍑芥暟鍚嶇О銆俬int/name琛ㄥ墠涓や釜瀛楄妭鏄嚱鏁扮殑搴忓彿錛屽悗4涓瓧鑺傛槸鍑芥暟鍚嶇О瀛楃涓茬殑鍦板潃
char
*
聽pszFunName聽
=
聽(
char
*
)
((BYTE
*
)hMod聽
+
聽(DWORD)pThunk
->
u1.AddressOfData聽
+
聽
2
);
//
聽鍙栧緱鍑芥暟鍦板潃銆侷AT琛ㄥ氨鏄竴涓狣WORD綾誨瀷鐨勬暟緇勶紝姣忎釜鎴愬憳璁板綍涓涓嚱鏁扮殑鍦板潃
PDWORD聽lpAddr聽
=
聽(DWORD
*
)((BYTE
*
)hMod聽
+
聽pImportDesc
->
FirstThunk)聽
+
聽n;
//
聽鎵撳嵃鍑哄嚱鏁板悕縐板拰鍦板潃
printf(
"
聽聽聽浠庢妯″潡瀵煎叆鐨勫嚱鏁幫細(xì)%-25s錛?/span>
"
,聽pszFunName);
printf(
"
鍑芥暟鍦板潃錛?X聽\n
"
,聽lpAddr);
n
++
;聽pThunk
++
;
}
pImportDesc
++
;
}
MessageBox(NULL,
"
Test
"
,
"
Test
"
,
0
);
}
#include聽
<
windows.h
>
#include聽
<
stdio.h
>
//
聽鎸傞挬鎸囧畾妯″潡hMod瀵筂essageBoxA鐨勮皟鐢?/span>
BOOL聽SetHook(HMODULE聽hMod);
//
聽瀹氫箟MessageBoxA鍑芥暟鍘熷瀷
typedef聽
int
聽(WINAPI聽
*
PFNMESSAGEBOX)(HWND,聽LPCSTR,聽LPCSTR,聽UINT聽uType);
//
聽淇濆瓨MessageBoxA鍑芥暟鐨勭湡瀹炲湴鍧
PROC聽g_orgProc聽
=
聽(PROC)MessageBoxA;
BOOL聽EnableDebugPrivilege()聽
{聽
BOOL聽fOk聽
=
聽FALSE;聽
HANDLE聽hToken;聽
if
聽(OpenProcessToken(GetCurrentProcess(),聽
聽聽聽聽聽聽聽TOKEN_ADJUST_PRIVILEGES,聽
&
hToken))聽
{聽
聽聽聽聽聽聽聽TOKEN_PRIVILEGES聽tp;
聽聽聽聽聽聽聽tp.PrivilegeCount聽
=
聽
1
;聽
聽聽聽聽聽聽聽LookupPrivilegeValue(NULL,聽SE_DEBUG_NAME,聽
&
tp.Privileges[
0
].Luid);聽
聽聽聽聽聽聽聽tp.Privileges[
0
].Attributes聽
=
聽SE_PRIVILEGE_ENABLED;聽
聽聽聽聽聽聽聽AdjustTokenPrivileges(hToken,聽FALSE,聽
&
tp,聽
sizeof
(tp),聽NULL,聽NULL);聽
聽聽聽聽聽聽聽fOk聽
=
聽(GetLastError()聽
==
聽ERROR_SUCCESS);聽
聽聽聽聽聽聽聽CloseHandle(hToken);聽
}
聽
return
聽fOk;聽
//
鎻愬崌鎴愬姛榪斿洖TRUE錛屽け璐ヨ繑鍥濬ALSE聽
}
void
聽main()
{
if
(EnableDebugPrivilege())
{
//
聽璋冪敤鍘烝PI鍑芥暟
::MessageBox(NULL,聽
"
鍘熷嚱鏁?/span>
"
,聽
"
Hook聽Api
"
,聽
0
);
//
聽鎸傞挬鍚庡啀璋冪敤
SetHook(::GetModuleHandle(NULL));
::MessageBox(NULL,聽
"
鍘熷嚱鏁?/span>
"
,聽
"
Hook聽Api
"
,聽
0
);
}
}
//
聽鐢ㄤ簬鏇挎崲MessageBoxA鐨勮嚜瀹氫箟鍑芥暟
int
聽WINAPI聽MyMessageBoxA(HWND聽hWnd,聽LPCSTR聽lpText,聽LPCSTR聽lpCaption,聽UINT聽uType)
{
return
聽((PFNMESSAGEBOX)g_orgProc)(hWnd,聽
"
Hook聽API聽Sucess!
"
,聽
"
OK
"
,聽uType);
return
聽
0
;
}
BOOL聽SetHook(HMODULE聽hMod)
{
IMAGE_DOS_HEADER
*
聽pDosHeader聽
=
聽(IMAGE_DOS_HEADER
*
)hMod;
IMAGE_OPTIONAL_HEADER聽
*
聽pOptHeader聽
=
(IMAGE_OPTIONAL_HEADER聽
*
)((BYTE
*
)hMod聽
+
聽pDosHeader
->
e_lfanew聽
+
聽
24
);
IMAGE_IMPORT_DESCRIPTOR
*
聽pImportDesc聽
=
聽(IMAGE_IMPORT_DESCRIPTOR
*
)
((BYTE
*
)hMod聽
+
聽pOptHeader
->
DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
//
聽鍦ㄥ鍏ヨ〃涓煡鎵緐ser32.dll妯″潡銆傚洜涓篗essageBoxA鍑芥暟浠巙ser32.dll妯″潡瀵煎嚭
while
(pImportDesc
->
FirstThunk)
{
char
*
聽pszDllName聽
=
聽(
char
*
)((BYTE
*
)hMod聽
+
聽pImportDesc
->
Name);
if
(lstrcmpiA(pszDllName,聽
"
user32.dll
"
)聽
==
聽
0
)
{
break
;
}
pImportDesc
++
;
}
if
(pImportDesc
->
FirstThunk)
{
//
聽涓涓狪MAGE_THUNK_DATA灝辨槸涓涓弻瀛楋紝瀹冩寚瀹氫簡涓涓鍏ュ嚱鏁?br />
聽75
//
聽璋冨叆鍦板潃琛ㄥ叾瀹炴槸IMAGE_THUNK_DATA緇撴瀯鐨勬暟緇勶紝涔熷氨鏄疍WORD鏁扮粍
IMAGE_THUNK_DATA
*
聽pThunk聽
=
聽(IMAGE_THUNK_DATA
*
)
((BYTE
*
)hMod聽
+
聽pImportDesc
->
FirstThunk);
while
(pThunk
->
u1.Function)
{
//
聽lpAddr鎸囧悜鐨勫唴瀛樹繚瀛樹簡鍑芥暟鐨勫湴鍧
DWORD
*
聽lpAddr聽
=
聽(DWORD
*
)
&
(pThunk
->
u1.Function);
if
(
*
lpAddr聽
==
聽(DWORD)g_orgProc)
{聽
DWORD聽oldProc;
BOOL聽VirSu
=
VirtualProtect(lpAddr,
sizeof
(DWORD),PAGE_READWRITE,
&
oldProc);
if
(VirSu
==
TRUE)
{
//
聽淇敼IAT琛ㄩ」錛屼嬌鍏舵寚鍚戞垜浠嚜瀹氫箟鐨勫嚱鏁幫紝鐩稿綋浜庘?lpAddr聽=聽(DWORD)MyMessageBoxA;鈥?/span>
DWORD
*
聽lpNewProc聽
=
聽(DWORD
*
)MyMessageBoxA;
::WriteProcessMemory(::GetCurrentProcess(),聽
lpAddr,聽
&
lpNewProc,聽
sizeof
(DWORD),聽NULL);
}
else
{
MessageBox(NULL,
"
Error!
"
,
"
a
"
,
0
);
}
return
聽TRUE;
}
pThunk
++
;
}
}
return
聽FALSE;
}
聽
鏈変釜閮侀椃鐨勯棶棰橈紝鍦?003sp1涓嬶紝涓嶇鏄彁鍗囪繘紼嬫潈闄愯繕鏄慨鏀瑰唴瀛樺寘鍚睘鎬ч兘鎴愬姛錛乨ebug鐗堟湰鑳芥垚鍔燂紒release灝變粬濞樼殑姝諱笉鎴愬姛錛侀儊闂鋒錛岄亶瀵婚珮鎵嬫棤鐫钀斤紝鏆傛椂絳夌潃鍏堛傘傘?/p>
1 榪涚▼涓庤繘紼嬮氫俊
銆銆榪涚▼鏄鍏ュ唴瀛樺茍鍑嗗鎵ц鐨勭▼搴忥紝姣忎釜榪涚▼閮芥湁縐佹湁鐨勮櫄鎷熷湴鍧絀洪棿錛岀敱浠g爜銆佹暟鎹互鍙?qiáng)瀹冨彲鍒╃敤鐨劸p葷粺璧勬簮(濡傛枃浠躲佺閬撶瓑)緇勬垚銆傚榪涚▼/澶氱嚎紼嬫槸Windows鎿嶄綔緋葷粺鐨勪竴涓熀鏈壒寰併侻icrosoft Win32搴旂敤緙栫▼鎺ュ彛(Application Programming Interface, API)鎻愪緵浜嗗ぇ閲忔敮鎸佸簲鐢ㄧ▼搴忛棿鏁版嵁鍏變韓鍜屼氦鎹㈢殑鏈哄埗錛岃繖浜涙満鍒惰浣跨殑媧誨姩縐頒負(fù)榪涚▼闂撮氫俊(InterProcess Communication, IPC)錛岃繘紼嬮氫俊灝辨槸鎸囦笉鍚岃繘紼嬮棿榪涜鏁版嵁鍏變韓鍜屾暟鎹氦鎹€?br />銆銆姝e洜涓轟嬌鐢╓in32 API榪涜榪涚▼閫氫俊鏂瑰紡鏈夊縐嶏紝濡備綍閫夋嫨鎭板綋鐨勯氫俊鏂瑰紡灝辨垚涓哄簲鐢ㄥ紑鍙戜腑鐨勪竴涓噸瑕侀棶棰橈紝涓嬮潰鏈枃灝嗗Win32涓繘紼嬮氫俊鐨勫嚑縐嶆柟娉曞姞浠ュ垎鏋愬拰姣旇緝銆?
2 榪涚▼閫氫俊鏂規(guī)硶
2.1 鏂囦歡鏄犲皠
銆銆鏂囦歡鏄犲皠(Memory-Mapped Files)鑳戒嬌榪涚▼鎶婃枃浠跺唴瀹瑰綋浣滆繘紼嬪湴鍧鍖洪棿涓鍧楀唴瀛橀偅鏍鋒潵瀵瑰緟銆傚洜姝わ紝榪涚▼涓嶅繀浣跨敤鏂囦歡I/O鎿嶄綔錛屽彧闇綆鍗曠殑鎸囬拡鎿嶄綔灝卞彲璇誨彇鍜屼慨鏀規(guī)枃浠剁殑鍐呭銆?br />銆銆Win32 API鍏佽澶氫釜榪涚▼璁塊棶鍚屼竴鏂囦歡鏄犲皠瀵硅薄錛屽悇涓繘紼嬪湪瀹冭嚜宸辯殑鍦板潃絀洪棿閲屾帴鏀跺唴瀛樼殑鎸囬拡銆傞氳繃浣跨敤榪欎簺鎸囬拡錛屼笉鍚岃繘紼嬪氨鍙互璇繪垨淇敼鏂囦歡鐨勫唴瀹癸紝瀹炵幇浜嗗鏂囦歡涓暟鎹殑鍏變韓銆?br />銆銆搴旂敤紼嬪簭鏈変笁縐嶆柟娉曟潵浣垮涓繘紼嬪叡浜竴涓枃浠舵槧灝勫璞°?br />銆銆(1)緇ф壙錛氱涓涓繘紼嬪緩绔嬫枃浠舵槧灝勫璞★紝瀹冪殑瀛愯繘紼嬬戶鎵胯瀵硅薄鐨勫彞鏌勩?br />銆銆(2)鍛藉悕鏂囦歡鏄犲皠錛氱涓涓繘紼嬪湪寤虹珛鏂囦歡鏄犲皠瀵硅薄鏃跺彲浠ョ粰璇ュ璞℃寚瀹氫竴涓悕瀛?鍙笌鏂囦歡鍚嶄笉鍚?銆傜浜屼釜榪涚▼鍙氳繃榪欎釜鍚嶅瓧鎵撳紑姝ゆ枃浠舵槧灝勫璞°傚彟澶栵紝絎竴涓繘紼嬩篃鍙互閫氳繃涓浜涘叾瀹僆PC鏈哄埗(鏈夊悕綆¢亾銆侀偖浠舵Ы絳?鎶婂悕瀛椾紶緇欑浜屼釜榪涚▼銆?br />銆銆(3)鍙ユ焺澶嶅埗錛氱涓涓繘紼嬪緩绔嬫枃浠舵槧灝勫璞★紝鐒跺悗閫氳繃鍏跺畠IPC鏈哄埗(鏈夊悕綆¢亾銆侀偖浠舵Ы絳?鎶婂璞″彞鏌勪紶閫掔粰絎簩涓繘紼嬨傜浜屼釜榪涚▼澶嶅埗璇ュ彞鏌勫氨鍙栧緱瀵硅鏂囦歡鏄犲皠瀵硅薄鐨勮闂潈闄愩?br />銆銆鏂囦歡鏄犲皠鏄湪澶氫釜榪涚▼闂村叡浜暟鎹殑闈炲父鏈夋晥鏂規(guī)硶錛屾湁杈冨ソ鐨勫畨鍏ㄦс備絾鏂囦歡鏄犲皠鍙兘鐢ㄤ簬鏈湴鏈哄櫒鐨勮繘紼嬩箣闂達(dá)紝涓嶈兘鐢ㄤ簬緗戠粶涓紝鑰屽紑鍙戣呰繕蹇呴』鎺у埗榪涚▼闂寸殑鍚屾銆?br />2.2 鍏變韓鍐呭瓨
銆銆Win32 API涓叡浜唴瀛?Shared Memory)瀹為檯灝辨槸鏂囦歡鏄犲皠鐨勪竴縐嶇壒孌婃儏鍐點(diǎn)傝繘紼嬪湪鍒涘緩鏂囦歡鏄犲皠瀵硅薄鏃剁敤0xFFFFFFFF鏉ヤ唬鏇挎枃浠跺彞鏌?HANDLE)錛屽氨琛ㄧず浜嗗搴旂殑鏂囦歡鏄犲皠瀵硅薄鏄粠鎿嶄綔緋葷粺欏甸潰鏂囦歡璁塊棶鍐呭瓨錛屽叾瀹冭繘紼嬫墦寮璇ユ枃浠舵槧灝勫璞″氨鍙互璁塊棶璇ュ唴瀛樺潡銆傜敱浜庡叡浜唴瀛樻槸鐢ㄦ枃浠舵槧灝勫疄鐜扮殑錛屾墍浠ュ畠涔熸湁杈冨ソ鐨勫畨鍏ㄦэ紝涔熷彧鑳借繍琛屼簬鍚屼竴璁$畻鏈轟笂鐨勮繘紼嬩箣闂淬?br />2.3 鍖垮悕綆¢亾
銆銆綆¢亾(Pipe)鏄竴縐嶅叿鏈変袱涓鐐圭殑閫氫俊閫氶亾錛氭湁涓绔彞鏌勭殑榪涚▼鍙互鍜屾湁鍙︿竴绔彞鏌勭殑榪涚▼閫氫俊銆傜閬撳彲浠ユ槸鍗曞悜錛嶄竴绔槸鍙鐨勶紝鍙︿竴绔偣鏄彧鍐欑殑錛涗篃鍙互鏄弻鍚戠殑涓綆¢亾鐨勪袱绔偣鏃㈠彲璇諱篃鍙啓銆?br />銆銆鍖垮悕綆¢亾(Anonymous Pipe)鏄?鍦ㄧ埗榪涚▼鍜屽瓙榪涚▼涔嬮棿錛屾垨鍚屼竴鐖惰繘紼嬬殑涓や釜瀛愯繘紼嬩箣闂翠紶杈撴暟鎹殑鏃犲悕瀛楃殑鍗曞悜綆¢亾銆傞氬父鐢辯埗榪涚▼鍒涘緩綆¢亾錛岀劧鍚庣敱瑕侀氫俊鐨勫瓙榪涚▼緇ф壙閫氶亾鐨勮绔偣鍙ユ焺鎴栧啓 绔偣鍙ユ焺錛岀劧鍚庡疄鐜伴氫俊銆傜埗榪涚▼榪樺彲浠ュ緩绔嬩袱涓垨鏇村涓戶鎵垮尶鍚嶇閬撹鍜屽啓鍙ユ焺鐨勫瓙榪涚▼銆傝繖浜涘瓙榪涚▼鍙互浣跨敤綆¢亾鐩存帴閫氫俊錛屼笉闇瑕侀氳繃鐖惰繘紼嬨?br />銆銆鍖垮悕綆¢亾鏄崟鏈轟笂瀹炵幇瀛愯繘紼嬫爣鍑咺/O閲嶅畾鍚戠殑鏈夋晥鏂規(guī)硶錛屽畠涓嶈兘鍦ㄧ綉涓婁嬌鐢紝涔熶笉鑳界敤浜庝袱涓笉鐩稿叧鐨勮繘紼嬩箣闂淬?br />2.4 鍛藉悕綆¢亾
銆銆鍛藉悕綆¢亾(Named Pipe)鏄湇鍔″櫒榪涚▼鍜屼竴涓垨澶氫釜瀹㈡埛榪涚▼涔嬮棿閫氫俊鐨勫崟鍚戞垨鍙屽悜綆¢亾銆備笉鍚屼簬鍖垮悕綆¢亾鐨勬槸鍛藉悕綆¢亾鍙互鍦ㄤ笉鐩稿叧鐨勮繘紼嬩箣闂村拰涓嶅悓璁$畻鏈轟箣闂翠嬌鐢紝鏈嶅姟鍣ㄥ緩绔嬪懡鍚嶇閬撴椂緇欏畠鎸囧畾涓涓悕瀛楋紝浠諱綍榪涚▼閮藉彲浠ラ氳繃璇ュ悕瀛楁墦寮綆¢亾鐨勫彟涓绔紝鏍規(guī)嵁緇欏畾鐨勬潈闄愬拰鏈嶅姟鍣ㄨ繘紼嬮氫俊銆?br />銆銆鍛藉悕綆¢亾鎻愪緵浜嗙浉瀵圭畝鍗曠殑緙栫▼鎺ュ彛錛屼嬌閫氳繃緗戠粶浼犺緭鏁版嵁騫朵笉姣斿悓涓璁$畻鏈轟笂涓よ繘紼嬩箣闂撮氫俊鏇村洶闅撅紝涓嶈繃濡傛灉瑕佸悓鏃跺拰澶氫釜榪涚▼閫氫俊瀹冨氨鍔涗笉浠庡績浜嗐?br />2.5 閭歡妲?br />銆銆閭歡妲?Mailslots)鎻?渚涜繘紼嬮棿鍗曞悜閫氫俊鑳藉姏錛屼換浣曡繘紼嬮兘鑳藉緩绔嬮偖浠舵Ы鎴愪負(fù)閭歡妲芥湇鍔″櫒銆傚叾瀹冭繘紼嬶紝縐頒負(fù)閭歡妲藉鎴鳳紝鍙互閫氳繃閭歡妲界殑鍚嶅瓧緇欓偖浠舵Ы鏈嶅姟鍣ㄨ繘紼嬪彂閫佹秷鎭傝繘鏉ョ殑娑?鎭竴鐩存斁鍦ㄩ偖浠舵Ы涓紝鐩村埌鏈嶅姟鍣ㄨ繘紼嬭鍙栧畠涓烘銆備竴涓繘紼嬫棦鍙互鏄偖浠舵Ы鏈嶅姟鍣ㄤ篃鍙互鏄偖浠舵Ы瀹㈡埛錛屽洜姝ゅ彲寤虹珛澶氫釜閭歡妲藉疄鐜拌繘紼嬮棿鐨勫弻鍚戦氫俊銆?br />銆銆閫氳繃閭歡妲藉彲浠ョ粰鏈湴璁$畻鏈轟笂鐨勯偖浠舵Ы銆佸叾瀹冭綆楁満涓婄殑閭歡妲芥垨鎸囧畾緗戠粶鍖哄煙涓墍鏈夎綆楁満涓婃湁鍚屾牱鍚嶅瓧鐨勯偖浠舵Ы鍙戦佹秷鎭傚箍鎾氫俊鐨勬秷鎭暱搴︿笉鑳借秴榪?00瀛楄妭錛岄潪騫挎挱娑堟伅鐨勯暱搴﹀垯鍙楅偖浠舵Ы鏈嶅姟鍣ㄦ寚瀹氱殑鏈澶ф秷鎭暱搴︾殑闄愬埗銆?br />銆銆閭歡妲戒笌鍛藉悕綆¢亾鐩鎬技錛屼笉榪囧畠浼犺緭鏁版嵁鏄氳繃涓嶅彲闈犵殑鏁版嵁鎶?濡俆CP/IP鍗忚涓殑UDP鍖?瀹屾垚鐨勶紝涓鏃︾綉緇滃彂鐢熼敊璇垯鏃犳硶淇濊瘉娑堟伅姝g‘鍦版帴鏀訛紝鑰屽懡鍚嶇閬撲紶杈撴暟鎹垯鏄緩绔嬪湪鍙潬榪炴帴鍩虹涓婄殑銆備笉榪囬偖浠舵Ы鏈夌畝鍖栫殑緙栫▼鎺ュ彛鍜岀粰鎸囧畾緗戠粶鍖哄煙鍐呯殑鎵鏈夎綆楁満騫挎挱娑堟伅鐨勮兘鍔涳紝鎵浠ラ偖浠舵Ы涓嶅け涓哄簲鐢ㄧ▼搴忓彂閫佸拰鎺ユ敹娑堟伅鐨勫彟涓縐嶉夋嫨銆?br />2.6 鍓創(chuàng)鏉?br />銆銆鍓創(chuàng)鏉?Clipped Board)瀹炶川鏄疻in32 API涓竴緇勭敤鏉ヤ紶杈撴暟鎹殑鍑芥暟鍜屾秷鎭紝涓篧indows搴旂敤紼嬪簭涔嬮棿榪涜鏁版嵁鍏變韓鎻愪緵浜嗕竴涓腑浠嬶紝W(xué)indows宸插緩绔嬬殑鍓垏(澶嶅埗)錛嶇矘璐寸殑鏈哄埗涓轟笉鍚屽簲鐢ㄧ▼搴忎箣闂村叡浜笉鍚屾牸寮忔暟鎹彁渚涗簡涓鏉℃嵎寰勩傚綋鐢ㄦ埛鍦ㄥ簲鐢ㄧ▼搴忎腑鎵ц鍓垏鎴栧鍒舵搷浣滄椂錛屽簲鐢ㄧ▼搴忔妸閫夊彇鐨勬暟鎹敤涓縐嶆垨澶氱鏍煎紡鏀懼湪鍓創(chuàng)鏉夸笂銆傜劧鍚庝換浣曞叾瀹冨簲鐢ㄧ▼搴忛兘鍙互浠庡壀璐存澘涓婃嬀鍙栨暟鎹紝浠庣粰瀹氭牸寮忎腑閫夋嫨閫傚悎鑷繁鐨勬牸寮忋?br />銆銆鍓創(chuàng)鏉挎槸涓涓潪甯告澗鏁g殑浜ゆ崲濯掍粙錛屽彲浠ユ敮鎸佷換浣曟暟鎹牸寮忥紝姣忎竴鏍煎紡鐢變竴鏃犵鍙鋒暣鏁版爣璇嗭紝瀵規(guī)爣鍑?棰勫畾涔?鍓創(chuàng)鏉挎牸寮忥紝璇ュ兼槸Win32 API瀹氫箟鐨勫父閲忥紱瀵歸潪鏍囧噯鏍煎紡鍙互浣跨敤Register Clipboard Format鍑芥暟娉ㄥ唽涓烘柊鐨勫壀璐存澘鏍煎紡銆傚埄鐢ㄥ壀璐存澘榪涜浜ゆ崲鐨勬暟鎹彧闇鍦ㄦ暟鎹牸寮忎笂涓鑷存垨閮藉彲浠ヨ漿鍖栦負(fù)鏌愮鏍煎紡灝辮銆備絾鍓創(chuàng)鏉垮彧鑳藉湪鍩轟簬Windows鐨勭▼搴忎腑浣跨敤錛屼笉鑳藉湪緗戠粶涓婁嬌鐢ㄣ?br />2.7 鍔ㄦ佹暟鎹氦鎹?br />銆銆鍔ㄦ佹暟鎹氦鎹?DDE)鏄嬌鐢ㄥ叡浜唴瀛樺湪搴旂敤紼嬪簭涔嬮棿榪涜鏁版嵁浜ゆ崲鐨勪竴縐嶈繘紼嬮棿閫氫俊褰㈠紡銆傚簲鐢ㄧ▼搴忓彲浠ヤ嬌鐢―DE榪涜涓嬈℃ф暟鎹紶杈擄紝涔熷彲浠ュ綋鍑虹幇鏂版暟鎹椂錛岄氳繃鍙戦佹洿鏂板煎湪搴旂敤紼嬪簭闂村姩鎬佷氦鎹㈡暟鎹?br />銆銆DDE鍜屽壀璐存澘涓鏍鋒棦鏀寔鏍囧噯鏁版嵁鏍煎紡(濡傛枃鏈佷綅鍥劇瓑)錛屽張鍙互鏀寔鑷繁瀹氫箟鐨勬暟鎹牸寮忋備絾瀹冧滑鐨勬暟鎹紶杈撴満鍒跺嵈涓嶅悓錛屼竴涓槑鏄懼尯鍒槸鍓創(chuàng)鏉挎搷浣滃嚑涔庢繪槸鐢ㄤ綔瀵圭敤鎴鋒寚瀹氭搷浣滅殑涓嬈℃у簲絳旓紞濡備粠鑿滃崟涓夋嫨Paste鍛戒護(hù)銆傚敖綆DE涔熷彲浠ョ敱鐢ㄦ埛鍚姩錛屼絾瀹冪戶緇彂鎸ヤ綔鐢ㄤ竴鑸笉蹇呯敤鎴瘋繘涓姝ュ共棰勩侱DE鏈変笁縐嶆暟鎹氦鎹㈡柟寮忥細(xì)
銆銆(1) 鍐烽摼錛氭暟鎹氦鎹㈡槸涓嬈℃ф暟鎹紶杈擄紝涓庡壀璐存澘鐩稿悓銆?br />銆銆(2) 娓╅摼錛氬綋鏁版嵁浜ゆ崲鏃舵湇鍔″櫒閫氱煡瀹㈡埛錛岀劧鍚庡鎴峰繀欏昏姹傛柊鐨勬暟鎹?br />銆銆(3) 鐑摼錛氬綋鏁版嵁浜ゆ崲鏃舵湇鍔″櫒鑷姩緇欏鎴峰彂閫佹暟鎹?br />銆銆DDE浜ゆ崲鍙互鍙戠敓鍦ㄥ崟鏈烘垨緗戠粶涓笉鍚岃綆楁満鐨勫簲鐢ㄧ▼搴忎箣闂淬傚紑鍙戣呰繕鍙互瀹氫箟瀹氬埗鐨凞DE鏁版嵁鏍煎紡榪涜搴旂敤紼嬪簭涔嬮棿鐗瑰埆鐩殑IPC錛屽畠浠湁鏇寸揣瀵嗚﹀悎鐨勯氫俊瑕佹眰銆傚ぇ澶氭暟鍩轟簬Windows鐨勫簲鐢ㄧ▼搴忛兘鏀寔DDE銆?br />2.8 瀵硅薄榪炴帴涓庡祵鍏?br />銆銆搴旂敤紼嬪簭鍒╃敤瀵硅薄榪炴帴涓庡祵鍏?OLE)鎶鏈鐞嗗鍚堟枃妗?鐢卞縐嶆暟鎹牸寮忕粍鎴愮殑鏂囨。)錛孫LE鎻愪緵浣挎煇搴旂敤紼嬪簭鏇村鏄撹皟鐢ㄥ叾瀹冨簲鐢ㄧ▼搴忚繘琛屾暟鎹紪杈戠殑鏈嶅姟銆備緥濡傦紝OLE鏀寔鐨勫瓧澶勭悊鍣ㄥ彲浠ュ祵濂楃數(shù)瀛愯〃鏍鹼紝褰撶敤鎴瘋緙栬緫鐢?shù)瀛愯〃鏍兼椂OLE搴撳彲鑷姩鍚姩鐢?shù)瀛愯〃鏍季~栬緫鍣ㄣ傚綋鐢ㄦ埛閫鍑虹數(shù)瀛愯〃鏍肩紪杈戝櫒鏃訛紝璇ヨ〃鏍煎凡鍦ㄥ師濮嬪瓧澶勭悊鍣ㄦ枃妗d腑寰楀埌鏇存柊銆傚湪榪欓噷鐢?shù)瀛愯〃鏍季~栬緫鍣ㄥ彉鎴愪簡瀛楀鐞嗗櫒鐨勬墿灞曪紝鑰屽鏋滀嬌鐢―DE錛岀敤鎴瘋鏄懼紡鍦板惎鍔ㄧ數(shù)瀛愯〃鏍肩紪杈戝櫒銆?br />銆銆鍚孌DE鎶鏈浉鍚岋紝澶у鏁板熀浜嶹indows鐨勫簲鐢ㄧ▼搴忛兘鏀寔OLE鎶鏈?br />2.9 鍔ㄦ佽繛鎺ュ簱
銆銆Win32鍔ㄦ佽繛鎺ュ簱(DLL)涓殑鍏ㄥ眬鏁版嵁鍙互琚皟鐢―LL鐨勬墍鏈夎繘紼嬪叡浜紝榪欏氨鍙堢粰榪涚▼闂撮氫俊寮杈熶簡涓鏉℃柊鐨勯斿緞錛屽綋鐒惰闂椂瑕佹敞鎰忓悓姝ラ棶棰樸?br />銆銆铏界劧鍙互閫氳繃DLL榪涜榪涚▼闂存暟鎹叡浜紝浣嗕粠鏁版嵁瀹夊叏鐨勮搴﹁冭檻錛屾垜浠茍涓嶆彁鍊¤繖縐嶆柟娉曪紝浣跨敤甯︽湁璁塊棶鏉冮檺鎺у埗鐨勫叡浜唴瀛樼殑鏂規(guī)硶鏇村ソ涓浜涖?br />2.10 榪滅▼榪囩▼璋冪敤
銆銆Win32 API鎻愪緵鐨勮繙紼嬭繃紼嬭皟鐢?RPC)浣垮簲鐢ㄧ▼搴忓彲浠ヤ嬌鐢ㄨ繙紼嬭皟鐢ㄥ嚱鏁幫紝榪欎嬌鍦ㄧ綉緇滀笂鐢≧PC榪涜榪涚▼閫氫俊灝卞儚鍑芥暟璋冪敤閭f牱綆鍗曘俁PC鏃㈠彲浠ュ湪鍗曟満涓嶅悓榪涚▼闂翠嬌鐢ㄤ篃鍙互鍦ㄧ綉緇滀腑浣跨敤銆?br />銆銆鐢變簬Win32 API鎻愪緵鐨凴PC鏈嶄粠OSF-DCE(Open Software Foundation Distributed Computing Environment)鏍囧噯銆傛墍浠ラ氳繃Win32 API緙栧啓鐨凴PC搴旂敤紼嬪簭鑳戒笌鍏跺畠鎿嶄綔緋葷粺涓婃敮鎸丏EC鐨凴PC搴旂敤紼嬪簭閫氫俊銆備嬌鐢≧PC寮鍙戣呭彲浠ュ緩绔嬮珮鎬ц兘銆佺揣瀵嗚﹀悎鐨勫垎甯冨紡搴旂敤紼嬪簭銆?br />2.11 NetBios鍑芥暟
銆銆Win32 API鎻愪緵NetBios鍑芥暟鐢ㄤ簬澶勭悊浣庣駭緗戠粶鎺у埗錛岃繖涓昏鏄負(fù)IBM NetBios緋葷粺緙栧啓涓嶹indows鐨勬帴鍙c傞櫎闈為偅浜涙湁鐗規(guī)畩浣庣駭緗戠粶鍔熻兘瑕佹眰鐨勫簲鐢ㄧ▼搴忥紝鍏跺畠搴旂敤紼嬪簭鏈濂戒笉瑕佷嬌鐢∟etBios鍑芥暟鏉ヨ繘琛岃繘紼嬮棿閫氫俊銆?br />2.12 Sockets
銆銆Windows Sockets瑙勮寖鏄互U.C.Berkeley澶уBSD UNIX涓祦琛岀殑Socket鎺ュ彛涓鴻寖渚嬪畾涔夌殑涓濂梂indows涓嬬殑緗戠粶緙栫▼鎺ュ彛銆傞櫎浜咮erkeley Socket鍘熸湁鐨勫簱鍑芥暟浠ュ錛岃繕鎵╁睍浜嗕竴緇勯拡瀵筗indows鐨勫嚱鏁幫紝浣跨▼搴忓憳鍙互鍏呭垎鍒╃敤Windows鐨勬秷鎭満鍒惰繘琛岀紪紼嬨?br />銆銆鐜板湪閫氳繃Sockets瀹炵幇榪涚▼閫氫俊鐨勭綉緇滃簲鐢ㄨ秺鏉ヨ秺澶氾紝榪欎富瑕佺殑鍘熷洜鏄疭ockets鐨勮法騫沖彴鎬ц姣斿叾瀹僆PC鏈哄埗濂藉緱澶氾紝鍙﹀WinSock 2.0涓嶄粎鏀寔TCP/IP鍗忚錛岃屼笖榪樻敮鎸佸叾瀹冨崗璁?濡侷PX)銆係ockets鐨勫敮涓緙虹偣鏄畠鏀寔鐨勬槸搴曞眰閫氫俊鎿嶄綔錛岃繖浣垮緱鍦ㄥ崟鏈虹殑榪涚▼闂磋繘琛岀畝鍗曟暟鎹紶閫掍笉澶柟渚匡紝榪欐椂浣跨敤涓嬮潰灝嗕粙緇嶇殑WM_COPYDATA娑堟伅灝嗘洿鍚堥備簺銆?br />2.13 WM_COPYDATA娑堟伅
銆銆WM_COPYDATA鏄竴縐嶉潪甯稿己澶у嵈椴滀負(fù)浜虹煡鐨勬秷鎭傚綋涓涓簲鐢ㄥ悜鍙︿竴涓簲鐢ㄤ紶閫佹暟鎹椂錛屽彂閫佹柟鍙渶浣跨敤璋冪敤SendMessage鍑芥暟錛屽弬鏁版槸鐩殑紿楀彛鐨勫彞鏌勩佷紶閫掓暟鎹殑璧峰鍦板潃銆乄M_COPYDATA娑堟伅銆傛帴鏀舵柟鍙渶鍍忓鐞嗗叾瀹冩秷鎭偅鏍峰鐞哤M_COPY DATA娑堟伅錛岃繖鏍鋒敹鍙戝弻鏂瑰氨瀹炵幇浜嗘暟鎹叡浜?br />銆銆WM_COPYDATA鏄竴縐嶉潪甯哥畝鍗曠殑鏂規(guī)硶錛屽畠鍦ㄥ簳灞傚疄闄呬笂鏄氳繃鏂囦歡鏄犲皠鏉ュ疄鐜扮殑銆傚畠鐨勭己鐐規(guī)槸鐏墊椿鎬т笉楂橈紝騫朵笖瀹冨彧鑳界敤浜嶹indows騫沖彴鐨勫崟鏈虹幆澧冧笅銆?
聽
鍦ㄧ綉涓婃悳浜嗗嚑涓簭鍒楀彿錛屽畨瑁呯殑鏃跺欒兘瀹夎浣嗘槸褰撲綘鍐嶆鍚姩杞歡鐨勬椂鍊欙紝浠栧氨宸茬粡鍜宎dob瀹樼綉榪涜浜嗚繛鎺ヨ嚜鍔ㄦ嫻嬶紝鍙兂鑰岀煡錛屽簭鍒楀彿灝辨棤鏁堜簡銆?/p>
聽
聽
鐮磋В鏂規(guī)硶聽
聽
搴忓垪鍙鳳細(xì)
1330-1082-3503-2270-3738-6738
1330-1776-8671-6289-7706-2916
1330-1567-6599-8775-4155-3745
緇濆鑳界敤錛侊紒錛侊紒
絎竴姝ワ細(xì)涓嬭澆瀹岃蔣浠訛紝瑕佸厛瑙e帇鍑烘潵銆?/p>
絎簩姝ワ細(xì)瀹夎錛屽埌浜嗚緭鍏ユ敞鍐岀爜鐣岄潰鏃訛紝閫夎瘯鐢?0澶╃殑閫夐」錛屼笉瑕佽緭鍏ユ敞鍐岀爜銆傚畨瑁呯晫闈㈡槸鍏ㄤ腑鏂囩殑錛屽畨瑁呭畬杞歡鏄嫳鏂囩殑銆?/p>
絎笁姝ワ細(xì)鎵撳紑杞歡錛屼細(xì)璺沖嚭杈撳叆娉ㄥ唽鐮佺晫闈紝浣跨敤涓婇潰鐨勬敞鍐岀爜錛岃緭鍏ワ紝鐐逛笅涓姝ワ紝榪涜蔣浠躲?/p>
絎洓姝ワ細(xì)鍏堥鍑鴻蔣浠訛紝鎵懼埌C:\WINDOWS\system32\drivers\etc閲岄潰鐨刪osts鏂囦歡,鍘繪帀鍏跺彧璇葷殑灞炴э紝鍙屽嚮鎵撳紑錛岄夌敤璁頒簨鏈墦寮錛?/p>
杈撳叆127.0.0.1 activate.adobe.com錛堜腑闂存湁涓┖鏍鹼級(jí)錛屼繚瀛橈紝閫鍑? 灞忚斀adobe嬋媧繪湇鍔″櫒銆?br />榪樹笉鏀懼績錛屽皢涓嬮潰鍏ㄩ儴緗戝潃娣誨姞榪涘幓.
灝嗕笅鍒楃綉鍧鍔犲叆HOSt
127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 ereg.adobe.com
127.0.0.1 activate.wip3.adobe.com
127.0.0.1 wip3.adobe.com
127.0.0.1 3dns-3.adobe.com
127.0.0.1 3dns-2.adobe.com
127.0.0.1 adobe-dns.adobe.com
127.0.0.1 adobe-dns-2.adobe.com
127.0.0.1 adobe-dns-3.adobe.com
127.0.0.1 ereg.wip3.adobe.com
127.0.0.1 activate-sea.adobe.com
127.0.0.1 wwis-dubc1-vip60.adobe.com
127.0.0.1 activate-sjc0.adobe.com
絎簲姝ワ細(xì)鍐嶆墦寮杞歡錛宱k銆傦紙鑻ヤ笉榪涜絎洓姝ワ紝鍐嶅惎鍔ㄨ蔣浠舵椂錛屽張浼?xì)锜╁嚭婵媧葷晫闈級(jí)銆?/p>
榪欎釜涓昏鏄負(fù)浜嗗睆钄借蔣浠朵笌瀹樻柟鏈嶅姟鍣ㄨ繛鎺ョ殑鍟婏紝濡傛灉杞歡鎯寵繛鎺ョ殑璇濆氨璁╁畠涓嶈榪炴帴瀹樻柟浜嗭紝榪炴帴鏈満灝卞彲浠ヤ簡銆傞伩鍏嶅啀嬈″嚭鐜版縺媧葷晫闈㈢殑鍟娿?/p>
鍐嶄緷嬈℃墦寮 紿楀彛->鎵╁睍鍔熻兘->榪炴帴->灝忎笁瑙掑艦 榪炴帴鍙?qiáng)鑴辨満閫夐」璁劇疆涓嶈繛鎺ョ綉緇?/p>
涓銆佷粈涔堟槸Unicode
銆銆鍏堜粠ASCII璇磋搗錛孉SCII鏄敤鏉ヨ〃紺鴻嫳鏂囧瓧絎︾殑涓縐嶇紪鐮佽鑼冦傛瘡涓狝SCII瀛楃鍗犵敤1涓瓧鑺傦紝鍥犳錛孉SCII緙栫爜鍙互琛ㄧず鐨勬渶澶у瓧絎︽暟鏄?55錛?0H鈥擣FH錛夈傚叾瀹烇紝鑻辨枃瀛楃騫舵病鏈夐偅涔堝錛屼竴鑸彧鐢ㄥ墠128涓紙00H鈥?FH錛屾渶楂樹綅涓?錛夛紝鍏朵腑鍖呮嫭浜嗘帶鍒跺瓧絎︺佹暟瀛椼佸ぇ灝忓啓瀛楁瘝鍜屽叾瀹冧竴浜涚鍙楓傝屾渶楂樹綅涓?鐨勫彟128涓瓧絎︼紙80H鈥擣FH錛夎縐頒負(fù)鈥滄墿灞旳SCII鈥濓紝涓鑸敤鏉ュ瓨鏀捐嫳鏂囩殑鍒惰〃絎︺侀儴鍒嗛煶鏍囧瓧絎︾瓑絳夌殑涓浜涘叾瀹冪鍙楓?br />銆銆榪欑瀛楃緙栫爜瑙勫垯鏄劇劧鐢ㄦ潵澶勭悊鑻辨枃娌℃湁浠涔堥棶棰樸備絾鏄潰瀵逛腑鏂囥侀樋鎷変集鏂囩瓑澶嶆潅鐨勬枃瀛楋紝255涓瓧絎︽樉鐒朵笉澶熺敤銆?br />浜庢槸錛屽悇涓浗瀹剁悍綰峰埗瀹氫簡鑷繁鐨勬枃瀛楃紪鐮佽鑼冿紝鍏朵腑涓枃鐨勬枃瀛楃紪鐮佽鑼冨彨鍋氣淕B2312鈥?0鈥濓紝瀹冩槸鍜孉SCII鍏煎鐨勪竴縐嶇紪鐮佽鑼冿紝鍏跺疄灝辨槸鍒╃敤鎵╁睍ASCII娌℃湁鐪熸鏍囧噯鍖栬繖涓鐐癸紝鎶婁竴涓腑鏂囧瓧絎︾敤涓や釜鎵╁睍ASCII瀛楃鏉ヨ〃紺猴紝浠ュ尯鍒咥SCII鐮侀儴鍒嗐?br />銆銆浣嗘槸榪欎釜鏂規(guī)硶鏈夐棶棰橈紝鏈澶х殑闂灝辨槸涓枃鐨勬枃瀛楃紪鐮佸拰鎵╁睍ASCII鐮佹湁閲嶅彔銆傝屽緢澶氳蔣浠跺埄鐢ㄦ墿灞旳SCII鐮佺殑鑻辨枃鍒惰〃絎︽潵鐢昏〃鏍鹼紝榪欐牱鐨勮蔣浠剁敤鍒頒腑鏂囩郴緇熶腑錛岃繖浜涜〃鏍煎氨浼?xì)琚璁や綔涓枃瀛椊W︼紝鍑虹幇涔辯爜銆?br />銆銆鍙﹀錛岀敱浜庡悇鍥藉拰鍚勫湴鍖洪兘鏈夎嚜宸辯殑鏂囧瓧緙栫爜瑙勫垯錛屽畠浠簰鐩稿啿紿侊紝榪欑粰鍚勫浗鍜屽悇鍦板尯浜ゆ崲淇℃伅甯︽潵浜嗗緢澶х殑楹葷儲(chǔ)銆?br />瑕佺湡姝hВ鍐寵繖涓棶棰橈紝涓嶈兘浠庢墿灞旳SCII鐨勮搴﹀叆鎵嬶紝鑰屽繀欏繪湁涓涓叏鏂扮殑緙栫爜緋葷粺錛岃繖涓郴緇熻鍙互灝嗕腑鏂囥佹硶鏂囥佸痙鏂団︹︾瓑絳夋墍鏈夌殑鏂囧瓧緇熶竴璧鋒潵鑰冭檻錛屼負(fù)姣忎竴涓枃瀛楅兘鍒嗛厤涓涓崟鐙殑緙栫爜銆?/p>
浜庢槸錛孶nicode璇炵敓浜嗐?/p>
銆銆Unicode涔熸槸涓縐嶅瓧絎︾紪鐮佹柟娉曪紝瀹冨崰鐢ㄤ袱涓瓧鑺傦紙0000H鈥擣FFFH錛?瀹圭撼65536涓瓧絎︼紝榪欏畬鍏ㄥ彲浠ュ綰沖叏涓栫晫鎵鏈夎璦鏂囧瓧鐨勭紪鐮併?br />鍦║nicode閲岋紝鎵鏈夌殑瀛楃琚竴瑙嗗悓浠侊紝姹夊瓧涓嶅啀浣跨敤鈥滀袱涓墿灞旳SCII鈥濓紝鑰屾槸浣跨敤鈥?涓猆nicode鈥濓紝涔熷氨鏄錛屾墍鏈夌殑鏂囧瓧閮芥寜涓涓瓧絎︽潵澶勭悊錛屽畠浠兘鏈変竴涓敮涓鐨刄nicode鐮併?/p>
浜屻佷嬌鐢║nicode緙栫爜鐨勫ソ澶?/p>
銆銆浣跨敤Unicode緙栫爜鍙互浣挎?zhèn)ㄧ殑宸ソE嬪悓鏃舵敮鎸佸縐嶈璦錛屼嬌鎮(zhèn)ㄧ殑宸ョ▼鍥介檯鍖栥?br />銆銆鍙﹀錛學(xué)indows NT鏄嬌鐢║nicode榪涜寮鍙戠殑錛屾暣涓郴緇熼兘鏄熀浜嶶nicode鐨勩傚鏋滆皟鐢ㄤ竴涓狝PI鍑芥暟騫剁粰瀹冧紶閫掍竴涓狝NSI錛圓SCII瀛楃闆嗕互鍙?qiáng)鐢辨娲剧敓迤堝吋瀹圭殑瀛椊W﹂泦錛屽錛欸B2312錛岄氬父縐頒負(fù)ANSI瀛楃闆嗭級(jí)瀛楃涓詫紝閭d箞緋葷粺棣栧厛瑕佸皢瀛楃涓茶漿鎹㈡垚Unicode錛岀劧鍚庡皢Unicode瀛楃涓蹭紶閫掔粰鎿嶄綔緋葷粺銆傚鏋滃笇鏈涘嚱鏁拌繑鍥濧NSI瀛楃涓詫紝緋葷粺灝變細(xì)棣栧厛灝哢nicode瀛楃涓茶漿鎹㈡垚ANSI瀛楃涓詫紝鐒跺悗灝嗙粨鏋滆繑鍥炵粰鎮(zhèn)ㄧ殑搴旂敤紼嬪簭銆傝繘琛岃繖浜涘瓧絎︿覆鐨勮漿鎹㈤渶瑕佸崰鐢ㄧ郴緇熺殑鏃墮棿鍜屽唴瀛樸傚鏋滅敤Unicode鏉ュ紑鍙戝簲鐢ㄧ▼搴忥紝灝辮兘澶熶嬌鎮(zhèn)ㄧ殑搴旂敤紼嬪簭鏇村姞鏈夋晥鍦拌繍琛屻?br />
涓嬮潰渚嬩婦鍑犱釜瀛楃鐨勭紪鐮佷互綆鍗曟紨紺篈NSI鍜孶nicode鐨勫尯鍒細(xì)
| 瀛楃 | 聽A | 聽N | 聽鍜?/td> |
| ANSI鐮?/td> | 聽41H | 聽4eH | 聽cdbaH |
| Unicode鐮?/td> | 聽0041H | 聽004eH | 聽548cH |
涓夈佷嬌鐢–++榪涜Unicode緙栫▼
銆銆瀵瑰瀛楃鐨勬敮鎸佸叾瀹炴槸ANSI C鏍囧噯鐨勪竴閮ㄥ垎錛岀敤浠ユ敮鎸佸瀛楄妭琛ㄧず涓涓瓧絎︺傚瀛楃鍜孶nicode騫朵笉瀹屽叏絳夊悓錛孶nicode鍙槸瀹藉瓧絎︾殑涓縐嶇紪鐮佹柟寮忋?/p>
1銆佸瀛楃鐨勫畾涔?/p>
銆銆鍦ˋNSI涓紝涓涓瓧絎︼紙char錛夌殑闀垮害涓轟竴涓瓧鑺傦紙Byte錛夈備嬌鐢║nicode鏃訛紝涓涓瓧絎﹀崰鎹竴涓瓧錛孋++鍦╳char.h澶存枃浠朵腑瀹氫箟浜嗘渶鍩烘湰鐨勫瀛楃綾誨瀷wchar_t錛?/p>
typedef unsigned short wchar_t;
浠庤繖閲屾垜浠彲浠ユ竻妤氬湴鐪嬪埌錛屾墍璋撶殑瀹藉瓧絎﹀氨鏄棤絎﹀彿鐭暣鏁般?/p>
2銆佸父閲忓瀛楃涓?/p>
銆銆瀵笴++紼嬪簭鍛樿岃█錛屾瀯閫犲瓧絎︿覆甯擱噺鏄竴欏圭粡甯告х殑宸ヤ綔銆傞偅涔堬紝濡備綍鏋勯犲瀛楃瀛楃涓插父閲忓憿錛熷緢綆鍗曪紝鍙鍦ㄥ瓧絎︿覆甯擱噺鍓嶅姞涓婁竴涓ぇ鍐欑殑L灝卞彲浠ヤ簡錛屾瘮濡傦細(xì)
wchar_t *str1=L" Hello";
榪欎釜L闈炲父閲嶈錛屽彧鏈夊甫涓婂畠錛岀紪璇戝櫒鎵嶇煡閬撲綘瑕佸皢瀛楃涓插瓨鎴愪竴涓瓧絎︿竴涓瓧銆傝繕瑕佹敞鎰忥紝鍦↙鍜屽瓧絎︿覆涔嬮棿涓嶈兘鏈夌┖鏍箋?/p>
3銆佸瀛楃涓插簱鍑芥暟
涓轟簡鎿嶄綔瀹藉瓧絎︿覆錛孋++涓撻棬瀹氫箟浜嗕竴濂楀嚱鏁幫紝姣斿姹傚瀛楃涓查暱搴︾殑鍑芥暟鏄?/p>
size_t __cdel wchlen(const wchar_t*);
銆銆涓轟粈涔堣涓撻棬瀹氫箟榪欎簺鍑芥暟鍛紵鏈鏍規(guī)湰鐨勫師鍥犳槸錛孉NSI涓嬬殑瀛楃涓查兘鏄互鈥橽0鈥欐潵鏍囪瘑瀛楃涓插熬鐨勶紙Unicode瀛楃涓蹭互鈥淺0\0鈥濈粨鏉燂級(jí)錛岃澶氬瓧絎︿覆鍑芥暟鐨勬紜搷浣滃潎鏄互姝や負(fù)鍩虹榪涜銆傝屾垜浠煡閬擄紝鍦ㄥ瀛楃鐨勬儏鍐典笅錛屼竴涓瓧絎﹀湪鍐呭瓨涓鍗犳嵁涓涓瓧鐨勭┖闂達(dá)紝榪欏氨浼?xì)鋴涉搷浣淎NSI瀛楃鐨勫瓧絎︿覆鍑芥暟鏃犳硶姝g‘鎿嶄綔銆備互鈥滺ello鈥濆瓧絎︿覆涓轟緥錛屽湪瀹藉瓧絎︿笅錛屽畠鐨勪簲涓瓧絎︽槸錛?br />0x0048 0x0065 0x006c 0x006c 0x006f
鍦ㄥ唴瀛樹腑錛屽疄闄呯殑鎺掑垪鏄細(xì)
48 00 65 00 6c 00 6c 00 6f 00
銆銆浜庢槸錛孉NSI瀛楃涓插嚱鏁幫紝濡俿trlen錛屽湪紕板埌絎竴涓?8鍚庣殑00鏃訛紝灝變細(xì)璁や負(fù)瀛楃涓插埌灝句簡錛岀敤strlen瀵瑰瀛楃涓叉眰闀垮害鐨勭粨鏋滃氨姘歌繙浼?xì)鏄?錛?/p>
4銆佺敤瀹忓疄鐜板ANSI鍜孶nicode閫氱敤鐨勭紪紼?/p>
銆銆鍙錛孋++鏈変竴鏁村鐨勬暟鎹被鍨嬪拰鍑芥暟瀹炵幇Unicode緙栫▼錛屼篃灝辨槸璇達(dá)紝鎮(zhèn)ㄥ畬鍏ㄥ彲浠ヤ嬌鐢–++瀹炵幇Unicode緙栫▼銆?br />濡傛灉鎴戜滑鎯寵鎴戜滑鐨勭▼搴忔湁涓や釜鐗堟湰錛欰NSI鐗堟湰鍜孶nicode鐗堟湰銆傚綋鐒?dòng)灱尵~栧啓涓ゅ浠g爜鍒嗗埆瀹炵幇ANSI鐗堟湰鍜孶nicode鐗堟湰瀹屽叏鏄寰楅氱殑銆備絾鏄紝閽堝ANSI瀛楃鍜孶nicode瀛楃緇存姢涓ゅ浠g爜鏄潪甯擱夯鐑?chǔ)鐨勪簨鎯呫備負(fù)浜嗗噺杞葷紪紼嬬殑璐熸媴錛孋++瀹氫箟浜嗕竴緋誨垪鐨勫畯錛屽府鍔╂?zhèn)ㄥ疄鐜板ANSI鍜孶nicode鐨勯氱敤緙栫▼銆?br />銆銆C++瀹忓疄鐜癆NSI鍜孶nicode鐨勯氱敤緙栫▼鐨勬湰璐ㄦ槸鏍規(guī)嵁鈥漘UNICODE鈥濓紙娉ㄦ剰錛屾湁涓嬪垝綰匡級(jí)瀹氫箟涓庡惁錛岃繖浜涘畯灞曞紑涓篈NSI鎴朥nicode瀛楃錛堝瓧絎︿覆錛夈?/p>
濡備笅鏄痶char.h澶存枃浠朵腑閮ㄥ垎浠g爜鎽樻妱錛?
#ifdef _UNICODE typedef wchar_t TCHAR; #define __T(x) L##x #define _T(x) __T(x) #else #define __T(x) x typedef char TCHAR; #endif銆銆鍙錛岃繖浜涘畯鏍規(guī)嵁鈥漘UNICODE鈥?瀹氫箟涓庡惁錛屽垎鍒睍寮涓篈NSI鎴朥nicode瀛楃銆?tchar.h澶存枃浠朵腑瀹氫箟鐨勫畯鍙互鍒嗕負(fù)涓ょ被錛?
A銆佸疄鐜板瓧絎﹀拰甯擱噺瀛楃涓插畾涔夌殑瀹忔垜浠彧鍒楀嚭涓や釜鏈甯哥敤鐨勫畯錛?
| 瀹? | 鏈畾涔塤UNICODE(ANSI瀛楃) | 瀹氫箟浜哶UNICODE(Unicode瀛楃) |
| TCHAR | 聽char | 聽wchar_t |
| _T(x) | 聽x | 聽L##x |
娉ㄦ剰錛?br />銆銆鈥?#鈥濇槸ANSI C鏍囧噯鐨勯澶勭悊璇硶錛屽畠鍙仛鈥滅矘璐寸鍙封濓紝琛ㄧず灝嗗墠闈㈢殑L娣誨姞鍒板畯鍙傛暟涓娿備篃灝辨槸璇達(dá)紝濡傛灉鎴戜滑鍐檁T(鈥淗ello鈥?錛屽睍寮鍚庡嵆涓篖鈥淗ello鈥?/p>
B銆佸疄鐜板瓧絎︿覆鍑芥暟璋冪敤鐨勫畯
C++涓哄瓧絎︿覆鍑芥暟涔熷畾涔変簡涓緋誨垪瀹忥紝鍚屾牱錛屾垜浠彧渚嬩婦鍑犱釜甯哥敤鐨勫畯錛?/p>
| 瀹? | 鏈畾涔塤UNICODE(ANSI瀛楃) | 瀹氫箟浜哶UNICODE(Unicode瀛楃) |
| _tcschr | 聽strchr | 聽wcschr |
| _tcscmp | 聽strcmp | 聽wcscmp |
| _tcslen | 聽strlen | 聽wcslen |
鍥涖佷嬌鐢╓in32 API榪涜Unicode緙栫▼
Win32 API涓畾涔変簡涓浜涜嚜宸辯殑瀛楃鏁版嵁綾誨瀷銆傝繖浜涙暟鎹被鍨嬬殑瀹氫箟鍦╳innt.h澶存枃浠朵腑銆備緥濡傦細(xì)
typedef char CHAR; typedef unsigned short WCHAR; // wc, 16-bit UNICODE character typedef CONST CHAR *LPCSTR, *PCSTR;Win32 API鍦╳innt.h澶存枃浠朵腑瀹氫箟浜嗕竴浜涘疄鐜板瓧絎﹀拰甯擱噺瀛楃涓茬殑瀹忚繘琛孉NSI/Unicode閫氱敤緙栫▼銆傚悓鏍鳳紝鍙緥涓懼嚑涓渶甯哥敤鐨勶細(xì)
#ifdef UNICODE typedef WCHAR TCHAR, *PTCHAR; typedef LPWSTR LPTCH, PTCH; typedef LPWSTR PTSTR, LPTSTR; typedef LPCWSTR LPCTSTR; #define __TEXT(quote) L##quote // r_winnt #else /* UNICODE */ // r_winnt typedef char TCHAR, *PTCHAR; typedef LPSTR LPTCH, PTCH; typedef LPSTR PTSTR, LPTSTR; typedef LPCSTR LPCTSTR; #define __TEXT(quote) quote // r_winnt #endif /* UNICODE */ // r_winnt銆銆浠庝互涓婂ご鏂囦歡鍙互鐪嬪嚭錛寃innt.h鏍規(guī)嵁鏄惁瀹氫箟浜哢NICODE錛堟病鏈変笅鍒掔嚎錛夛紝榪涜鏉′歡緙栬瘧銆?br />銆銆 Win32 API涔熷畾涔変簡涓濂楀瓧絎︿覆鍑芥暟錛屽畠浠牴鎹槸鍚﹀畾涔変簡鈥淯NICODE鈥濆垎鍒睍寮涓篈NSI鍜孶nicode瀛楃涓插嚱鏁般傚錛歭strlen銆侫PI鐨勫瓧絎︿覆鎿嶄綔鍑芥暟鍜孋++鐨勬搷浣滃嚱鏁板彲浠ュ疄鐜扮浉鍚岀殑鍔熻兘錛屾墍浠ワ紝濡傛灉闇瑕佺殑璇濓紝寤鴻鎮(zhèn)ㄥ敖鍙兘浣跨敤C++鐨勫瓧絎︿覆鍑芥暟錛屾病蹇呰鍘昏姳澶綺懼姏鍐嶅幓瀛︿範(fàn)API鐨勮繖浜涗笢瑗褲?br />銆銆涔熻鎮(zhèn)ㄤ粠鏉ユ病鏈夋敞鎰忓埌錛學(xué)in32 API瀹為檯涓婃湁涓や釜鐗堟湰銆備竴涓増鏈帴鍙桵BCS瀛楃涓詫紝鍙︿竴涓帴鍙桿nicode瀛楃涓層備緥濡傦細(xì)鍏跺疄鏍規(guī)湰娌℃湁SetWindowText()榪欎釜API鍑芥暟錛岀浉鍙嶏紝鏈塖etWindowTextA()鍜孲etWindowTextW()銆傚悗緙A琛ㄦ槑榪欐槸MBCS鍑芥暟錛屽悗緙W琛ㄧず榪欐槸Unicode鐗堟湰鐨勫嚱鏁般傝繖浜汚PI鍑芥暟鐨勫ご鏂囦歡鍦╳inuser.h涓0鏄庯紝涓嬮潰渚嬩婦winuser.h涓殑SetWindowText()鍑芥暟鐨勫0鏄庨儴鍒嗭細(xì)
#ifdef UNICODE #define SetWindowText SetWindowTextW #else #define SetWindowText SetWindowTextA #endif // !UNICODE銆銆鍙錛孉PI鍑芥暟鏍規(guī)嵁瀹氫箟UNICODE涓庡惁鍐沖畾鎸囧悜Unicode鐗堟湰榪樻槸MBCS鐗堟湰銆?br />銆銆緇嗗績鐨勮鑰呭彲鑳藉凡緇忔敞鎰忓埌浜哢NICODE鍜宊UNICODE鐨勫尯鍒紝鍓嶈呮病鏈変笅鍒掔嚎錛屼笓闂ㄧ敤浜嶹indows澶存枃浠訛紱鍚庤呮湁涓涓墠緙涓嬪垝綰匡紝涓撻棬鐢ㄤ簬C榪愯鏃跺ご鏂囦歡銆傛崲鍙ヨ瘽璇達(dá)紝涔熷氨鏄湪ANSI C++璇█閲岄潰鏍規(guī)嵁_UNICODE錛堟湁涓嬪垝綰匡級(jí)瀹氫箟涓庡惁錛屽悇瀹忓垎鍒睍寮涓篣nicode鎴朅NSI瀛楃錛屽湪Windows閲岄潰鏍規(guī)嵁UNICODE錛堟棤涓嬪垝綰匡級(jí)瀹氫箟涓庡惁錛屽悇瀹忓垎鍒睍寮涓篣nicode鎴朅NSI瀛楃銆?br />銆銆鍦ㄥ悗闈㈡垜浠皢浼?xì)鐪嬪垘图屽疄闄呬娇鐢ㄤ腑鎴戜滑涓嶅姞涓ユ牸鍖哄垎锛屽悓鏃跺畾涔塤UNICODE鍜孶NICODE錛屼互瀹炵幇UNICODE鐗堟湰緙栫▼銆?
浜斻乂C++6.0涓紪鍐橴nicode緙栫爜鐨勫簲鐢ㄧ▼搴?
銆銆VC++ 6.0鏀寔Unicode緙栫▼錛屼絾榛樿鐨勬槸ANSI錛屾墍浠ュ紑鍙戜漢鍛樺彧闇瑕佺◢寰敼鍙樹竴涓嬬紪鍐欎唬鐮佺殑涔?fàn)鎯究鍙互杞绘潉〖栧啓鏀寔UNICODE鐨勫簲鐢ㄧ▼搴忋?br />銆銆浣跨敤VC++ 6.0榪涜Unicode緙栫▼涓昏鍋氫互涓嬪嚑欏瑰伐浣滐細(xì)
1銆佷負(fù)宸ョ▼娣誨姞UNICODE鍜宊UNICODE棰勫鐞嗛夐」銆?
銆銆鍏蜂綋姝ラ錛氭墦寮[宸ョ▼]->[璁劇疆鈥瀵硅瘽妗嗭紝濡傚浘1鎵紺猴紝鍦–/C++鏍囩瀵硅瘽妗嗙殑鈥滈澶勭悊紼嬪簭瀹氫箟鈥濅腑鍘婚櫎_MBCS錛屽姞涓奯UNICODE,UNICODE銆傦紙娉ㄦ剰涓棿鐢ㄩ楀彿闅斿紑錛夋敼鍔ㄥ悗濡傚浘2錛?/p>

鍥句竴

鍥句簩
銆銆鍦ㄦ病鏈夊畾涔塙NICODE鍜宊UNICODE鏃訛紝鎵鏈夊嚱鏁板拰綾誨瀷閮介粯璁や嬌鐢ˋNSI鐨勭増鏈紱鍦ㄥ畾涔変簡UNICODE鍜宊UNICODE涔嬪悗錛屾墍鏈夌殑MFC綾誨拰W(xué)indows API閮藉彉鎴愪簡瀹藉瓧鑺傜増鏈簡銆?br />
2銆佽緗▼搴忓叆鍙g偣
銆銆鍥犱負(fù)MFC搴旂敤紼嬪簭鏈夐拡瀵筓nicode涓撶敤鐨勭▼搴忓叆鍙g偣錛屾垜浠璁劇疆entry point銆傚惁鍒欏氨浼?xì)鍑虹幇杩炴帴閿欒銆?br />銆銆璁劇疆entry point鐨勬柟娉曟槸錛氭墦寮[宸ョ▼]->[璁劇疆鈥瀵硅瘽妗嗭紝鍦↙ink欏電殑Output綾誨埆鐨凟ntry Point閲屽~涓妛WinMainCRTStartup銆?/p>

鍥句笁
3銆佷嬌鐢ˋNSI/Unicode閫氱敤鏁版嵁綾誨瀷
銆銆寰蔣鎻愪緵浜嗕竴浜汚NSI鍜孶nicode鍏煎鐨勯氱敤鏁版嵁綾誨瀷錛屾垜浠渶甯哥敤鐨勬暟鎹被鍨嬫湁_T 錛孴CHAR錛孡PTSTR,LPCTSTR銆?br />銆銆欏轟究璇翠竴涓嬶紝LPCTSTR鍜宑onst TCHAR*鏄畬鍏ㄧ瓑鍚岀殑銆傚叾涓璍琛ㄧずlong鎸囬拡錛岃繖鏄負(fù)浜嗗吋瀹筗indows 3.1絳?6浣嶆搷浣滅郴緇熼仐鐣欎笅鏉ョ殑錛屽湪Win32 涓互鍙?qiáng)鍏跺畠鐨?2浣嶆搷浣滅郴緇熶腑錛宭ong鎸囬拡鍜宯ear鎸囬拡鍙?qiáng)far淇グ絎﹂兘鏄負(fù)浜嗗吋瀹圭殑浣滅敤錛屾病鏈夊疄闄呮剰涔夈侾錛坧ointer錛夎〃紺鴻繖鏄竴涓寚閽堬紱C錛坈onst錛夎〃紺烘槸涓涓父閲忥紱T(_T瀹?琛ㄧず鍏煎ANSI鍜孶nicode錛孲TR錛坰tring錛夎〃紺鴻繖涓彉閲忔槸涓涓瓧絎︿覆銆傜患涓婂彲浠ョ湅鍑猴紝LPCTSTR琛ㄧず涓涓寚鍚戝父鍥哄畾鍦板潃鐨勫彲浠ユ牴鎹竴浜涘畯瀹氫箟鏀瑰彉璇箟鐨勫瓧絎︿覆銆傛瘮濡傦細(xì)
TCHAR* szText=_T(鈥淗ello!鈥?; TCHAR szText[]=_T(鈥淚 Love You鈥?; LPCTSTR lpszText=_T(鈥滃ぇ瀹跺ソ錛佲?;浣跨敤鍑芥暟涓殑鍙傛暟鏈濂戒篃瑕佹湁鍙樺寲錛屾瘮濡傦細(xì)
MessageBox(_T(鈥滀綘濂解?);
銆銆鍏跺疄錛屽湪涓婇潰鐨勮鍙ヤ腑錛屽嵆浣挎?zhèn)ㄤ笉鍔燺T瀹忥紝MessageBox鍑芥暟涔熶細(xì)鑷姩鎶娾滀綘濂解濆瓧絎︿覆榪涜寮哄埗杞崲銆備絾鎴戣繕鏄帹鑽愭?zhèn)ㄤ娇鐢╛T瀹忥紝浠ヨ〃紺烘?zhèn)ㄦ湁Unicode緙栫爜鎰忚瘑銆?
4銆佷慨鏀瑰瓧絎︿覆榪愮畻闂
銆銆涓浜涘瓧絎︿覆鎿嶄綔鍑芥暟闇瑕佽幏鍙栧瓧絎︿覆鐨勫瓧絎︽暟(sizeof(szBuffer)/sizeof(TCHAR))錛岃屽彟涓浜涘嚱鏁板彲鑳介渶瑕佽幏鍙栧瓧絎︿覆鐨勫瓧鑺傛暟sizeof(szBuffer)銆傛?zhèn)ㄥ簲璇ユ敞鎰忚闂迤堜粩缁嗗垎鏋愬瓧绗︿覆鎿嶄綔鍑芥晭图屼互纭畾鑳藉寰楀埌姝<嫯鐨劸l撴灉銆?br />ANSI鎿嶄綔鍑芥暟浠tr寮澶達(dá)紝濡俿trcpy()錛宻trcat()錛宻trlen()錛?br />Unicode鎿嶄綔鍑芥暟浠cs寮澶達(dá)紝濡倃cscpy錛寃cscpy()錛寃cslen()錛?br />ANSI/Unicode鎿嶄綔鍑芥暟浠tcs寮澶?_tcscpy(C榪愯鏈熷簱)錛?br />ANSI/Unicode鎿嶄綔鍑芥暟浠str寮澶?lstrcpy(Windows鍑芥暟)錛?br />鑰冭檻ANSI鍜孶nicode鐨勫吋瀹癸紝鎴戜滑闇瑕佷嬌鐢ㄤ互_tcs寮澶存垨lstr寮澶寸殑閫氱敤瀛楃涓叉搷浣滃嚱鏁般?/p>
鍏佷婦涓猆nicode緙栫▼鐨勪緥瀛?/p>
絎竴姝ワ細(xì)
銆銆鎵撳紑VC++6.0錛屾柊寤哄熀浜庡璇濇鐨勫伐紼婾nicode錛屼富瀵硅瘽妗咺DD_UNICODE_DIALOG涓姞鍏ヤ竴涓寜閽帶浠訛紝鍙屽嚮璇ユ帶浠跺茍娣誨姞璇ユ帶浠剁殑鍝嶅簲鍑芥暟錛?/p>
void CUnicodeDlg::OnButton1()
{
TCHAR* str1=_T("ANSI鍜孶NICODE緙栫爜璇曢獙");
m_disp=str1;
UpdateData(FALSE);
}
銆銆娣誨姞闈欐佹枃鏈IDC_DISP錛屼嬌鐢–lassWizard緇欒鎺т歡娣誨姞CString綾誨瀷鍙橀噺m_disp銆備嬌鐢ㄩ粯璁NSI緙栫爜鐜緙栬瘧璇ュ伐紼嬶紝鐢熸垚Unicode.exe銆?
絎簩姝ワ細(xì)
銆銆鎵撳紑鈥滄帶鍒墮潰鏉庫濓紝鍗曞嚮鈥滄棩鏈熴佹椂闂淬佽璦鍜屽尯鍩熻緗濋夐」錛屽湪鈥滄棩鏈熴佹椂闂淬佽璦鍜屽尯鍩熻緗濈獥鍙d腑緇х畫鍗曞嚮鈥滃尯鍩熷拰璇█閫夐」鈥濋夐」錛屽脊鍑衡滃尯鍩熷拰璇█閫夐」鈥濆璇濇銆傚湪璇ュ璇濇涓紝鍗曞嚮鈥滈珮綰р濇爣絳撅紝灝嗏滈潪Unicode鐨勭▼搴忕殑璇█鈥濋夐」鏀逛負(fù)鈥滄棩璇濓紝鍗曞嚮鈥滃簲鐢ㄢ濇寜閽紝濡傚浘鍥涳細(xì)

鍥懼洓
寮瑰嚭鐨勫璇濇鍗曞嚮鈥滄槸鈥濓紝閲嶆柊鍚姩璁$畻鏈轟嬌璁劇疆鐢熸晥銆?br />榪愯Unicode.exe紼嬪簭騫跺崟鍑燴淏utton1鈥濇寜閽紝鐪嬶紝闈欐佹枃鏈鍑虹幇浜嗕貢鐮併?/p>
絎笁姝ワ細(xì)
銆銆鏀逛負(fù)Unicode緙栫爜鐜緙栬瘧璇ュ伐紼嬶紝鐢熸垚Unicode.exe銆傚啀嬈¤繍琛孶nicode.exe紼嬪簭騫跺崟鍑燴淏utton1鈥濇寜閽傜湅鍒癠nicode緙栫爜鐨勪紭鍔夸簡鍚с?/p>
灝辮榪欎簺鍚э紝紲濇?zhèn)ㄥソ杩愩?/p>
ANSI/Unicode瀛楃鍜屽瓧絎︿覆
TChar.h鏄疭tring.h鐨勪慨鏀癸紝鐢ㄤ簬鍒涘緩ANSI/Unicode閫氱敤瀛楃涓層?/p>
Unicode瀛楃涓茬殑姣忎釜瀛楃閮芥槸16浣嶇殑銆?/p>
Win9x鍙敮鎸丄NSI錛沇in2000/XP/2003鏀寔ANSI/Unicode錛沇inCE鍙敮鎸乁nicode
聽聽聽聽聽聽 闄勶細(xì)鏈夐儴鍒哢nicode鍑芥暟涔熷彲浠ュ湪Win9X涓嬌鐢紝浣嗗彲鑳戒細(xì)鍑虹幇鎰忔兂涓嶅埌閿欒銆?/p>
wchar_t鏄疷nicode瀛楃鐨勬暟鎹被鍨嬨?/p>
鎵鏈夌殑Unicode鍑芥暟鍧囦互wcs寮澶達(dá)紝ANSI鍑芥暟鍧囦互str寮澶達(dá)紱ANSI C瑙勫畾C榪愯鏈熷簱鏀寔ANSI鍜孶nicode
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ANSI聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Unicode
聽聽聽聽聽聽 char聽聽 *strcat(char聽聽 *,聽聽 const聽聽 char聽聽 *)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wchar_t聽聽 *wcscat(wchar_t聽聽 *,聽聽 const聽聽 wchar_t聽聽 *)
聽聽聽聽聽聽 char聽聽 *strchr(const聽聽 char * , int)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wchar_t聽聽聽 *wcschr(const聽聽 wchar_t聽聽 * , int)
聽聽聽聽聽聽 int聽聽 strcmp(const聽聽 char聽聽 *,聽聽聽 const聽聽 char聽聽 *)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 int聽聽聽 wcscmp(const聽聽 wchar_t聽聽 *, const聽聽 wchar_t *)
聽聽聽聽聽聽 char *strcpy(char聽聽 *,聽聽 const聽聽 char聽聽 *)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wchar_t聽聽 *wcscpy(wchar_t聽聽聽 *,聽聽 const聽聽 wchar_t聽聽聽 *)
聽聽聽聽聽聽 size_t聽聽 strlen(const聽聽 char聽聽 *)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wchar_t聽聽聽 wcslen(const聽聽 wchar_t聽聽 *)
L" wash " : 鐢ㄤ簬灝咥NSI瀛楃涓茶漿鎹負(fù)Unicode瀛楃涓詫紱
聽聽聽聽聽聽聽 _TEXT(" wash ")鏍規(guī)嵁鏄惁瀹氫箟Unicode鎴朹Unicode榪涜杞崲銆?br />聽聽聽聽聽聽 闄勶細(xì)_Unicode鐢ㄤ簬C榪愯搴擄紱Unicode鐢ㄤ簬Windows澶存枃浠躲?/p>
ANSI/Unicode閫氱敤鏁版嵁綾誨瀷
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Both錛圓NSI/Unicode錛壜犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅?ANSI聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Unicode
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LPCTSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LPCSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LPCWSTR
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LPTSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LPSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LPWSTR
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PCTSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PCSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PCWSTR
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PTSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PSTR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PWSTR
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 TBYTE(TCHAR)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 CHAR聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 WCHAR
鍦ㄨ璁ll鏃舵渶濂芥彁渚汚NSI鍜孶nicode鍑芥暟錛孉NSI鍑芥暟鍙敤浜庡垎閰嶅唴瀛橈紝灝嗗瓧絎﹁漿鎹負(fù)Unicode瀛楃錛岀劧鍚庤皟鐢║nicode鍑芥暟銆?/p>
鏈濂戒嬌鐢ㄦ搷浣滅郴緇熷嚱鏁幫紝灝戜嬌鐢ㄦ垨涓嶅疄鐢–榪愯鏈熷嚱鏁?br />聽聽聽聽聽聽聽 eg錛氭搷浣滅郴緇熷瓧絎︿覆鍑芥暟錛坰hlWApi.h錛?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 StrCat(), StrChr(), StrCmp(), StrCpy()絳?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 娉ㄦ剰瀹冧滑鍖哄垎澶у皬鍐欙紝涔熷尯鍒咥NSI鍜孶nicode鐗堟湰
聽聽聽聽聽聽聽 闄勶細(xì)ANSI鐗堝嚱鏁板湪鍘熷嚱鏁板悗鍔犲ぇ鍐欏瓧姣岮
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Unicode鍑芥暟鍦ㄥ師鍑芥暟鍚庡姞澶у啓瀛楁瘝W
鎴愪負(fù)絎﹀悎ANSI鍜孶nicode鐨勫嚱鏁?br />聽聽聽聽聽聽聽 鈥?灝嗘枃鏈覆瑙嗕負(fù)瀛楃鏁扮粍錛岃屼笉鏄痗 h a r s鏁扮粍鎴栧瓧鑺傛暟緇勩?br />聽聽聽聽聽聽聽 鈥?灝嗛氱敤鏁版嵁綾誨瀷錛堝T C H A R鍜孭 T S T R錛夌敤浜庢枃鏈瓧絎﹀拰瀛楃涓層?br />聽聽聽聽聽聽聽 鈥?灝嗘樉寮忔暟鎹被鍨嬶紙濡侭 Y T E鍜孭 B Y T E錛夌敤浜庡瓧鑺傘佸瓧鑺傛寚閽堝拰鏁版嵁緙撳瓨銆?br />聽聽聽聽聽聽聽 鈥?灝員 E X T瀹忕敤浜庡師涔夊瓧絎﹀拰瀛楃涓層?br />聽聽聽聽聽聽聽 鈥?淇敼瀛楃涓茶繍綆楅棶棰?銆?br />聽聽聽聽聽聽聽聽聽 濡傦細(xì)sizeof(szBuffer) -> sizeof(szBuffer) / sizeof(TCHAR)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 malloc(charNum) -> malloc(charNum * sizeof(TCHAR))聽聽聽聽
瀵筓nicode瀛楃鎿嶄綔鐨勫嚱鏁拌繕鏈夛細(xì)錛堜篃鏈堿NSI鍜孶nicode鐗堟湰錛?br />聽聽聽聽聽聽 lstrcat() , lstrcmp() / lstrcmpi()[ 瀹冧滑鍦ㄥ唴閮ㄨ皟鐢–ompareString() ], lstrcpy(), lstrlen()
聽聽聽聽聽聽 榪欎簺鏄綔涓哄畯瀹炵幇鐨勩?/p>
聽聽聽聽聽聽聽聽聽 C榪愯鏈熷嚱鏁奧犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅犅?windows鍑芥暟
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 tolower()聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PTSTR聽聽 CharLower(PTSTR聽聽 pszString)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 toupper()聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PTSTR聽聽 CharUpper(PTSTR聽聽 pszString)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 isalpha()聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BOOL聽聽 IsCharAlpha(TCHAR聽聽 ch)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BOOL聽聽 ISCharAlphaNumeric(TCHAR聽聽 ch)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 islower()聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BOOL聽聽 IsCharLower(TCHAR聽聽 ch)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 isupper()聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BOOL聽聽 IsCharUpper(TCHAR聽聽 ch)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 print()聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wsprintf()
聽聽聽聽聽聽 杞崲Buffer錛欴WORD聽聽 CharLowerBuffer(PTSTR聽聽 pszString , DWORD cchString)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 DWORD CharUpperBuffer(PTSTR聽聽 pszString , DWORD聽聽 cchString)
聽聽聽聽聽聽 涔熷彲杞崲鍗曚釜瀛楃錛屽錛歍CHAR聽聽 cLowerCaseChar = CharLower((PTSTR)szString[0])
紜畾瀛楃鏄疉NSI鎴朥nicode
聽聽聽聽聽聽聽 BOOL聽聽 IsTextUnicode(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 const聽聽 VOID聽聽 * pBuffer,聽聽 //input聽聽 buffer聽聽 to be聽聽 examined
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 int聽聽 cb,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //size of input聽聽 buffer
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LPINT聽聽 lpi聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //options
聽聽聽聽聽聽聽 )
聽聽聽聽聽聽 闄勶細(xì)姝ゅ嚱鏁板湪Win9x緋葷粺涓紝娌℃湁瀹炵幇浠g爜錛屽緇堣繑鍥濬ALSE
Unicode涓嶢NSI涔嬮棿鐨勮漿鎹?br />聽聽聽聽聽聽聽 char聽聽 szA[40];
聽聽聽聽聽聽聽 wchar聽聽 szW[40];
聽聽聽聽聽聽聽 // Normal聽聽 sprintf : all聽聽 string聽聽 are聽聽 ANSI
聽聽聽聽聽聽聽 sprintf( szA , " %s " , " ANSI聽聽 str ");
聽聽聽聽聽聽聽 // Convert聽聽 Unicode聽聽 string聽聽 to ANSI
聽聽聽聽聽聽聽 sprintf(聽聽 szA,聽聽 " %S " ,聽聽 L" Unicode聽聽 str ");
聽聽聽聽聽聽聽 // Normal聽聽 swprintf : all string are unicode
聽聽聽聽聽聽聽 swprinf( szW , "%s" , L" Unicode聽聽 str ");
聽聽聽聽聽聽聽 // Convert聽聽 ANSI聽聽 String to Unicode
聽聽聽聽聽聽聽 swprinf( szW, L"%S" , "ANSI str");
聽聽聽聽聽聽聽 int聽聽 MultiByteToWideChar(
聽聽聽聽聽聽聽聽聽聽聽聽聽 UINT聽聽 uCodePage,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //code page,聽聽 0
聽聽聽聽聽聽聽聽聽聽聽聽聽 DWORD聽聽 dwFlags,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //character-type聽聽 options,聽聽 0
聽聽聽聽聽聽聽聽聽聽聽聽聽 PCSTR聽聽 pMultiByte,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //source聽聽 string聽聽 Addr
聽聽聽聽聽聽聽聽聽聽聽聽聽 int聽聽 cchMultiByte,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //source聽聽 string聽聽 byte length
聽聽聽聽聽聽聽聽聽聽聽聽聽 PWSTR聽聽 pWideCharStr,聽聽聽聽聽聽聽聽聽 //Dest string聽聽 Addr
聽聽聽聽聽聽聽聽聽聽聽聽聽 int聽聽 cchWideChar聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //Dest聽聽 string char聽聽 Nums
聽聽聽聽聽聽聽聽 )
聽聽聽聽聽聽聽 u C o d e P a g e鍙傛暟鐢ㄤ簬鏍囪瘑涓涓笌澶氬瓧鑺傚瓧絎︿覆鐩稿叧鐨勪唬鐮侀〉鍙楓俤 w F l a g s鍙傛暟鐢ㄤ簬璁懼畾鍙︿竴涓帶浠訛紝瀹冨彲浠ョ敤閲嶉煶絎﹀彿涔嬬被鐨勫尯鍒嗘爣璁版潵褰卞搷瀛楃銆傝繖浜涙爣蹇楅氬父騫朵笉浣跨敤錛屽湪d w F l a g s鍙傛暟涓紶閫?銆俻 M u l t i B y t e S t r鍙傛暟鐢ㄤ簬璁懼畾瑕佽漿鎹㈢殑瀛楃涓詫紝 c c h M u l t i B y t e鍙傛暟鐢ㄤ簬鎸囨槑璇ュ瓧絎︿覆鐨勯暱搴︼紙鎸夊瓧鑺傝綆楋級(jí)銆傚鏋滀負(fù)c c h M u l t i B y t e鍙傛暟浼犻? 1錛岄偅涔堣鍑芥暟鐢ㄤ簬紜畾婧愬瓧絎︿覆鐨勯暱搴︺傝漿鎹㈠悗浜х敓鐨刄 n i c o d e鐗堟湰瀛楃涓插皢琚啓鍏ュ唴瀛樹腑鐨勭紦瀛橈紝鍏跺湴鍧鐢眕 Wi d e C h a r S t r鍙傛暟鎸囧畾銆傚繀欏誨湪c c h Wi d e C h a r鍙傛暟涓瀹氳緙撳瓨鐨勬渶澶у鹼紙浠ュ瓧絎︿負(fù)璁¢噺鍗曚綅錛夈傚鏋滆皟鐢∕ u l t i B y t e To Wi d e C h a r錛岀粰c c h Wi d e C h a r鍙傛暟浼犻?錛岄偅涔堣鍙傛暟灝嗕笉鎵ц瀛楃涓茬殑杞崲錛岃屾槸榪斿洖涓轟嬌杞崲鍙栧緱鎴愬姛鎵闇瑕佺殑緙撳瓨鐨勫箋?/p>
聽聽聽聽 鍙互閫氳繃涓嬪垪姝ラ灝嗗瀛楄妭瀛楃涓茶漿鎹㈡垚U n i c o d e絳変環(huán)瀛楃涓詫細(xì)
聽聽聽聽 1) 璋冪敤M u l t i B y t e To Wi d e C h a r鍑芥暟錛屼負(fù)p Wi d e C h a r S t r鍙傛暟浼犻扤 U L L錛屼負(fù)c c h Wi d e C h a r鍙傛暟浼犻?銆?br />聽聽聽聽 2) 鍒嗛厤瓚沖鐨勫唴瀛樺潡錛岀敤浜庡瓨鏀捐漿鎹㈠悗鐨刄 n i c o d e瀛楃涓層傝鍐呭瓨鍧楃殑澶у皬鐢卞墠闈㈠M u l t B y t e To Wi d e C h a r鐨勮皟鐢ㄨ繑鍥炪?br />聽聽聽聽 3) 鍐嶆璋冪敤M u l t i B y t e To Wi d e C h a r錛岃繖嬈″皢緙撳瓨鐨勫湴鍧浣滀負(fù)p Wi d e C h a r S t r鍙傛暟鏉ヤ紶閫掞紝騫朵紶閫掔涓嬈¤皟鐢∕ u l t i B y t e To Wi d e C h a r鏃惰繑鍥炵殑緙撳瓨澶у皬錛屼綔涓篶 c h Wi d e c h a r鍙傛暟銆?br />聽聽聽聽 4) 浣跨敤杞崲鍚庣殑瀛楃涓層?br />聽聽聽聽 5) 閲婃斁U n i c o d e瀛楃涓插崰鐢ㄧ殑鍐呭瓨鍧椼?/p>
聽聽聽 int WideCharToMultiByte(
聽聽聽聽聽聽聽聽聽 UINT CodePage,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // code page
聽聽聽聽聽聽聽聽聽 DWORD dwFlags,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // performance and mapping flags
聽聽聽聽聽聽聽聽聽 LPCWSTR lpWideCharStr,聽聽聽聽聽 // wide-character string
聽聽聽聽聽聽聽聽聽 int cchWideChar,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // number of chars in string
聽聽聽聽聽聽聽聽聽 LPSTR lpMultiByteStr,聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // buffer for new string
聽聽聽聽聽聽聽聽聽 int cbMultiByte,聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // size of buffer
聽聽聽聽聽聽聽聽聽 LPCSTR lpDefaultChar,聽聽聽聽聽聽聽聽聽聽聽 // default for unmappable chars
聽聽聽聽聽聽聽聽聽 LPBOOL lpUsedDefaultChar聽聽 // set when default char used
聽聽聽聽 )
鎴戜滑鍐沖畾鍐欒繖綃囨瘮杈冩枃绔犳槸鍥犱負(fù)鎴戜滑鏈熸湜鏇村鐨勪漢鑳芥紜湴璇㈤棶鎴戜滑涓轟綍浠栦滑瑕佺敤Ice浠f浛CORBA銆傚榪欎釜闂錛屾垜浠氬父鐨勫洖絳旀槸錛氫負(fù)浠涔堜笉鍏堣嚜宸辮瘯璇曚嬌鐢?Ice鍛紵鎴戜滑鏁㈣偗瀹氾紝涓鏃︿綘浣跨敤浜咺ce鏈変竴孌墊椂闂達(dá)紝浣犲氨姘歌繙涓嶄細(xì)鍐嶆兂鐢ㄥ洖CORBA銆傝鐩鎬俊鎴戜滑錛屽緢瀹規(guī)槗浼?xì)鍠湅脾涓奍ce錛屽洜涓哄畠浼橀泤銆佺畝鍗曪紝瀹冪殑緇撴瀯涓鑷存э紝鑰屼笖鏈鍚庝竴鐐癸細(xì)鑷沖皯瀹冩病鏈夊ぇ閲忕殑鐗規(guī)у拰宸ュ叿銆?/p>
瀵逛簬娌℃湁鏃墮棿鍘昏瘯楠孖ce鏉ヤ簡瑙e畠鐨勪漢錛岃繖閲屾湁涓浜涘師鍥犺鎴戜滑鐩鎬俊Ice浼樹簬CORBA錛?/p>
1銆丆ompleteness(瀹屽鎬?
褰撴垜浠鍒板畬澶囨ф椂錛屾垜浠殑鎰忔濇槸瀹為檯浜у搧鐨勫畬澶囨э紝鑰屼笉鏄粠鏉ユ湭琚疄鐜扮殑鏍囧噯鐨勫畬澶囨с傛垜浠浉淇ce姣斿競(jìng)鍦轟笂浠諱綍鍗曚釜CORBA鏇村畬澶囥備綘鍙互鑷繁鍋氫竴涓鏌ワ細(xì)甯?jìng)鍦轰笂鏈夊摢涓狢ORBA浜у搧鎻愪緵浜嗚窡Ice鍙瘮杈冪殑鐗規(guī)э紵
2銆丳erformance(鎬ц兘)
鐢變簬鍏鋒湁CORBA鎵娌℃湁鐨勭粨鏋勪紭鐐癸紝Ice鍏鋒湁紿佸嚭鐨勬ц兘銆侷ce楂樻晥鐨勫崗璁佽姹傛壒閲忓寲銆侀珮鏁堢殑浜嬩歡鍒嗗彂閮芥剰鍛崇潃Ice姣擟ORBA ORB榪愯寰楁洿蹇紝鍚屾椂娑堣楁洿灝戠殑綰胯礬甯﹀銆?/p>
3銆丯o "Design by Committee"(闈炩滃鍛樹細(xì)璁捐鈥?
Ice鐢變竴緹や笓涓氱殑璧勬繁涓撳鎵璁捐銆侷ce娌℃湁璁捐鎴愰傚悎鎵鏈変漢鐨勨滀竾閲戞補(bǔ)鈥濄傝孋ORBA鍒欏厖鏂ョ潃琚叿鏈夌壒鏉冪殑鍒跺畾鑰呭姞榪涘埌鏍囧噯閲岀殑浼楀涓嶅垏瀹為檯鐨勭壒鎬э紝鍗村張娌℃湁鐪熸鑰冭檻鍒拌繖浜涚壒鎬ф槸鍚︿細(xì)琚湡姝e湴瀹炵幇銆?/p>
閫氬父錛屼負(fù)浜嗗氨CORBA鏍囧噯杈炬垚涓鑷寸殑鍞竴鏂規(guī)硶灝辨槸灝嗕箣鍓嶅ぇ閲忓疄鐜扮殑鐗規(guī)ф斁鍦ㄤ竴璧鳳紝鐢熺‖鍦板榪涙爣鍑嗛噷銆傝繖瀵艱嚧浜嗘爣鍑嗚秺鏉ヨ秺澶э紝涔熻秺鏉ヨ秺澶嶆潅錛岃秴鍑轟簡瀹為檯鐨勯渶瑕併傝繖涔熸剰鍛崇潃騫沖彴鏇村ぇ鏇存參錛屼篃鍥犱負(fù)澶嶆潅鐨凙PI瀵艱嚧浜嗛毦浠ヤ嬌鐢ㄣ侷ce鎻愪緵鐨凙PI闆嗗皬寰楀錛屼篃鏇撮珮鏁堬紝姣擟ORBA鐨凙PI鏄撲簬瀛︿範(fàn)浣跨敤錛屽茍涓斿姛鑳藉茍涓嶅皯銆?/p>
4銆丼lice
Slice錛孖ce鐨勮鑼冨畾涔夎璦錛屾瘮CORBA IDL鏇村皬銆佹洿綆媧併佹洿寮哄ぇ銆係lice鍏鋒湁鏇村皯鐨勮璦緇撴瀯錛屼絾鍗存洿鐏墊椿銆備緥濡傦紝涓涓唴寤虹殑瀛楀吀綾誨瀷鎻愪緵鐩存帴蹇熻闂暟鎹粨鏋勶紝寮傚父鐨勭戶鎵垮厑璁告洿娓呮櫚鍦板獎(jiǎng)灝勫埌鏀寔寮傚父澶勭悊鐨勮璦銆傚悓鏃訛紝Slice鎶涘純浜咰ORBA IDL涓嶉渶瑕佺殑澶嶆潅鎬э紝渚嬪灞炴э紝inout鍙傛暟錛屼笂涓嬫枃鍜屼紶鍊煎璞?Objects-by-Value)鐨勫鏉傛с?/p>
5銆丩anguage Mappings(璇█褰卞皠)
Ice鏀寔鍒癈++銆丣ava銆丳ython銆丳HP銆丆#鍜孷isual Basic鐨勮璦褰卞皠銆傛垜浠煡閬撲換浣曚竴涓狢ORBA瀹炵幇鎻愪緵鍟嗛兘娌℃湁鎻愪緵閭d箞澶氱殑璇█褰卞皠閫夋嫨銆?/p>
瀹為檯涓婂ぇ澶氭暟鐨凜ORBA鎻愪緵鍟嗗彧鎻愪緵C++鍜孞ava鐨勫獎(jiǎng)灝勶紝濡傛灉浣犳兂浣跨敤鍏跺畠璇█褰卞皠錛屼綘灝辮鍒囨崲鍒頒笉鍚岀殑鎻愪緵鍟嗙殑浜у搧鎴栦嬌鐢ㄦ病鏈夊疄楠屾敮鎸佺殑CORBA瀹炵幇銆?/p>
6銆丳ersistence(鎸佷箙鎬?
Slice騫朵笉鍗曞崟鏄竴涓帴鍙e畾涔夎璦銆傚畠涔熷彲浠ョ敤鏉ユ弿榪癐ce瀵硅薄榪涜鎸佷箙鐨勫睘鎬э紝浣垮緱寰堝鏄撳啓鍑烘敮鎸佸璞℃寔涔呯殑鏈嶅姟鍣ㄧ紼嬪簭銆?/p>
7銆丮etadata(鍏冩暟鎹?
Slice鏀寔鍙墿灞曠殑鍏冩暟鎹鏂斤紝瀹冨厑璁窼lice涓哄疄鐜板簲鐢ㄧ▼搴忕浉鍏崇殑鏌愪簺鐩殑鑰屼嬌鐢ㄥ厓鏁版嵁鐨勬爣璁般備緥濡傚厓鏁版嵁鍙互鐢ㄤ簬瀹氬埗涓嶅悓浜庢爣鍑咼ava褰卞皠鏂瑰紡鐨勫獎(jiǎng)灝勬潵婊¤凍鏌愪簺鐗瑰畾紼嬪簭鐨勮姹傘?/p>
8銆丯o any Type(娌℃湁any鏁版嵁綾誨瀷)
Ice 娌℃湁CORBA閲孉ny綾誨瀷鐨勭瓑浠鋒暟鎹被鍨嬨傝繖瀵逛簬CORBA鐢ㄦ埛鏉ヨ鍙兘鎰熷埌寰堟儕璁訛紝鍥犱負(fù)Any鏁版嵁綾誨瀷鍦–ORBA鏍囧噯閲岃騫挎硾鍦頒嬌鐢ㄣ備絾鏄紝Any 鏁版嵁綾誨瀷鏄浣欑殑錛氱▼搴忚璦璞ava鍜孋++騫舵病鏈堿ny鏁版嵁綾誨瀷錛岃屼笖Any鏁版嵁綾誨瀷瀵瑰垎甯冨紡緋葷粺鏉ヨ涔熶笉鏄睘浜庝竴涓壇濂界殑璁捐銆侫ny鏁版嵁綾誨瀷閫氬父鐢ㄥ湪涓ょ鎯呭喌涓嬶細(xì)涓縐嶆槸闇瑕佸湪緋葷粺鐨勪腑浠嬮儴鍒嗗鎺ユ敹鍒扮殑鏁版嵁鐩存帴榪涜浼犻掞紝鑰屼笉鐢ㄥ叧蹇冩暟鎹殑鐪熷疄綾誨瀷錛屼緥濡侰ORBA鐨凟vent鏈嶅姟錛屽彟涓縐嶆槸鐢ㄦ潵浣滀負(fù) union(鑱斿悎緇撴瀯浣?鐨勪竴涓瓑浠風(fēng)墿銆?/p>
Ice鍙互閫氳繃鍙戦佸拰鎺ユ敹"blobs"鐨勮姹傛潵婊¤凍絎竴縐嶆儏鍐碉紝Slice鐨勭被緇ф壙鍙互婊¤凍絎簩縐嶆儏鍐點(diǎn)備換浣曚竴縐嶆儏鍐碉紝Ice鐨勭▼搴忛兘鏇撮珮鏁堬紝鏇村姞鍏鋒湁綾誨瀷瀹夊叏錛屾洿鍔犲鏄撹璁″拰瀹炵幇錛岃屼笉浼?xì)閬囧堫C嬌鐢–ORBA Any鏁版嵁綾誨瀷鏃舵墍鍏鋒湁鐨勫鏉傛с?/p>
9銆両ce Core(Ice鐨勬牳蹇?
铏界潃鏃墮棿鐨勬紨鍖栵紝CORBA鐨勬牳蹇冨彉寰楀紓甯哥殑澶嶆潅銆備竴涓垵綰х殑渚嬪瓙瑕佸湪POA(CORBA鐨勫璞¢傞厤鍣?閲岄潰姝g‘浣跨敤閮介渶瑕佸緢涓撲笟鐨勭煡璇嗭紝鍗充嬌浣犲彧鎯蟲敮鎸佷竴灝忛儴鍒嗙殑鎶鏈壒鎬с侷ce鐨勫璞¢傞厤鍣紝鍦ㄥ彟涓鏂歸潰鏉ヨ錛屾洿鍔犵畝鍗曘佺洿瑙傘佷篃璺烶OA涓鏍風(fēng)殑鍔熻兘寮哄ぇ錛氬畾涔夎壇濂界殑API浣垮緱姣擯OA寮鍙戜竴涓彲鎵╁睍鐨勭▼搴忛」鐩渶瑕佹洿灝戠殑宸ヤ綔銆?/p>
10銆両ce Protocol(Ice鍗忚)
IIOP鏄疌ORBA鐨勫急鐐逛箣涓錛屽叿鏈夊お澶氱殑璁捐緙洪櫡銆備緥濡傦紝娌℃湁緙哄皯璇鋒眰鐨勫皝瑁呮潵闃叉娑堟伅鐨勫垎鍙戙備綆鏁堢殑瀵歸綈瑙勫垯瀵艱嚧浜嗗浣欑殑鏁版嵁鎷瘋礉銆傛暟鎹殑緙栫爜瑙勫垯澶嶆潅錛屽嵈娌℃湁甯︽潵鐩稿簲鐨勬ц兘鐨勬彁楂橈紝瀵硅薄寮曠敤鐨勭紪鐮佸紓甯稿鏉傦紝濡ㄧ浜嗘湁鏁堢殑鐨勭紪鐮佸拰鍦ㄥ唴瀛樺叡浜殑鎵ц銆備唬鐮侀泦鐨勫崗鍟嗘槸鍦ㄦ爣鍑嗕笅杈炬垚錛屼細(xì)閬亣鍒板緢澶氬啿紿併傛墍鏈夎繖浜涘鏉傛ф剰鍛崇潃IIOP寰堥毦瀹炵幇錛屽甫鏉ヤ簡浜掓搷浣滄у拰鎬ц兘涓婄殑闂銆侷ce鐨勫崗璁槸綆鍗曞茍涓旀洿鍔犳湁鏁堬紝瀹冩彁渚涗簡涓浜汭IOP娌℃湁鎻愪緵鐨勭壒鎬э紝渚嬪鏁版嵁鍘嬬緝鍜屾壒璇鋒眰鎵歸噺鍖栥?/p>
11銆丼ecurity(瀹夊叏鎬?
瀹夊叏鎬ф槸CORBA鐨勬渶澶х殑涓涓毦棰樸侽MG宸茬粡閫氳繃浜嗗涓爣鍑嗭紝浣嗗緢澶氶兘娌℃湁琚箍娉涘湴瀹炵幇錛孋ORBA鐨勫鎴蜂緷鐒舵病鏈変竴涓彲宸ヤ綔鐨勫畨鍏ㄧ殑ORBs銆傚綋璁捐 Ice鏃訛紝鍜孋ORBA鐩告瘮錛屽畨鍏ㄦц璁や負(fù)鏄熀鏈殑鐗規(guī)с傝繖灝辨槸Ice鎻愪緵涓涓湡姝h兘榪愪綔鐨凷SL瀹炵幇鐨勫畨鍏ㄧ殑闃茬伀澧欑殑鍘熷洜銆?/p>
12銆丆++ Mapping(C++鏄犲皠)
鐢?C++鏉ヤ嬌鐢–ORBA闈炲父鍥伴毦銆傚嵆浣夸綘鏄緢鏈夌粡楠岀殑C++寮鍙戣呫侰ORBA鐨凜++鏄犲皠鍦ㄥ唴瀛樼鐞嗗拰寮傚父瀹夊叏鏂歸潰鏈夊緢澶氱殑闄烽槺鍜岀己闄楓傜浉杈冧箣涓嬶紝Ice鐨凜++鏄犲皠闈炲父綆鍗曞拰鐩磋銆傚畠涓嶄細(xì)鏈夊洜涓洪敊璇屽鑷村唴瀛樼殑娉勬紡銆傝璁頒綇鐨勬槧灝勮鍒欑殑鏁扮洰姣擟ORBA鐨凜++鏄犲皠灝戝緱澶氾紝鑰屼笖Ice鐨凜++ 鏄犲皠鏄熀浜庡伐涓氭爣鍑嗙殑STL銆?/p>
14銆丼calability(鍙幾緙╂?
褰撲綘鏄竴涓笓瀹舵椂錛孋ORBA鏄竴縐嶅彲浼哥緝鎬у緢濂界殑鎶鏈備絾閲囩敤Ice錛屼換浣曚漢閮藉彲浠ュ啓鍑洪珮鍙幾緙╂х殑搴旂敤銆備緥濡傦紝Ice瀹炵幇浜嗕竴涓寔涔呭寲鐨勯愬嚭鍣紝浣犲彲浠ヤ嬌鐢ㄥ畠鏉ュ緢瀹規(guī)槗鍦板鐞嗕笂鐧句竾鐨勫璞★紝浣犳墍鍋氱殑浠呬粎鏄湪 Slice鐨勫畾涔夐噷鎸囧畾瀵硅薄鐨勬暟鎹紝鍓╀笅鐨勫伐浣淚ce涓鎵嬪寘鍔烇細(xì)Ice榪愯搴撲嬌鐢ㄩ珮閫熺殑鏁版嵁搴撴潵鑷姩鍔犺澆鍜屼繚瀛樺璞°?/p>
15銆乂ersioning(鐗堟湰鍖?
CORBA娌℃湁浠諱綍鏈哄埗鏉ユ敮鎸佸璞$姸鎬佺殑鐗堟湰鍖栥侳reeze鏄疘ce鐨勬寔涔呮湇鍔★紝瀹冨厑璁告寔涔呮暟鎹湪Slice鐨勫畾涔変腑鏀瑰彉鏃訛紝寰堝鏄撳湴榪涜鏁版嵁搴撶殑縐繪銆?/p>
16銆丼oftware Updates(杞歡鏇存柊)
IcePatch鏄竴涓厑璁鎬綘鏇磋瀹㈡埛绔蔣浠剁殑宸ュ叿銆傚畠浣跨敤鍘嬬緝鏉ユ彁楂樻暟鎹殑浼犺緭錛屽茍浣跨敤鏍¢獙鍊兼潵淇濊瘉涓鑷存с侰ORBA瀹屽叏娌℃湁鎻愪緵涓涓湪鍒嗗竷寮忕幆澧冩潵榪涜杞歡鏇存柊鐨勬満鍒躲?/p>
17銆乀yped Event Service(綾誨瀷鍖栫殑浜嬩歡鏈嶅姟)
CORBA鏈変竴涓爣鍑嗘潵鎻愪緵綾誨瀷鍖栫殑浜嬩歡鏈嶅姟錛屼絾寰堝皯鐢氳嚦娌℃湁琚疄鐜般傜被鍨嬪寲鐨勪簨浠舵湇鍔′篃鏈夊緢澶氬凡鐭ョ殑闂錛屼簨瀹炰笂瀹冨湪鐪熸鐜鐨勯儴緗叉槸涓嶅彲鐢ㄧ殑銆侷ce浠庝竴寮濮嬪氨鎻愪緵浜嗙被鍨嬪寲浜嬩歡鐨勬湇鍔°侷ceStorm鏄竴涓珮鏁堛佺被鍨嬪寲浜嬩歡鏈嶅姟鐨勫疄鐜幫紝瀹冩敮鎸佷簨浠惰仈鐩熴?/p>
18銆丗acets(澶氭帴鍙?
CORBA鏀寔緇ф壙錛孌COM鏀寔鑱氬悎銆傚湪榪囧幓錛屾湁寰堝鍏充簬閭d竴縐嶆槸鏇村ソ鐨勬柟娉曠殑浜夎銆侷ce浠ユ帴鍙g戶鎵垮姞涓婁互澶氭帴鍙e艦寮忕殑鑱氬悎鏉ュ悓鏃舵敮鎸佽繖涓ょ鏂瑰紡銆侳acets鍏佽浣犲湪榪愯鐨勬椂鍊欑敤鍔ㄦ佺殑鑱氬悎鏉ユ墿灞曠被鍨嬫潵鏇夸唬闈欐佺殑緇ф壙銆?/p>
19銆丄synchronous Messages(寮傛娑堟伅)
CORBA 鏀寔寮傛娑堟伅璋冪敤(AMI)錛屼絾寰堝皯CORBA浜у搧瀹炵幇浜咥MI銆侷ce涓寮濮嬪氨浠ョ畝鍗曞拰鏈夋晥鐨勬柟寮忔敮鎸丄MI銆侷ce涔熸敮鎸佸紓姝ユ秷鎭垎鍙?AMD)錛岃繖鏄疌ORBA閲屽畬鍏ㄦ病鏈夌殑涓滆タ銆侫MD絳変環(huán)浜庡鎴風(fēng)鐨凙MI錛屼笉榪嘇MD鏄敤鍦ㄦ湇鍔″櫒绔殑銆備嬌鐢ˋMI錛屼綘鍙互鍙戦佷簡涓涓姹傦紝鐒跺悗鍦ㄤ互鍚庣殑涓涓簨浠舵敹鍒版湇鍔″櫒鐨勭粨鏋滄椂璋冪敤涓涓洖璋冨嚱鏁版潵澶勭悊榪斿洖鐨勭粨鏋溿傝屼嬌鐢ˋMD錛屼綘鍙互灝嗗垎鍙戠嚎紼嬪綊榪樼粰Ice錛屽茍鍦ㄧ粨鏋滃凡緇忓噯澶囧ソ鍙戦佸埌瀹㈡埛绔椂鍐嶆璋冪敤鍒嗗彂綰跨▼銆?AMI鍜孉MD閮借兘琚繛鎺ヨ搗鏉ワ紝榪欏厑璁鎬綘鍙秷鑰楀緢灝戠殑璧勬簮灝辮兘鏋勫緩楂樻晥鐨勮礬鐢辯▼搴忋?/p>
AMI鍜孉MD瀵瑰鎴風(fēng)鍜屾湇鍔″櫒绔潵璇撮兘鏄忔槑鐨勩備篃灝辨槸錛屼竴涓湇鍔″櫒紼嬪簭涓嶇煡閬撲竴涓姹傛槸鍚﹂氳繃AMI璋冪敤鍙戝嚭鐨勮繕鏄悓姝ュ湴璋冪敤鍙戝嚭鐨勶紝瀹㈡埛绔▼搴忎篃涓嶇煡閬撲竴涓搷浣滅殑璋冪敤鍦ㄦ湇鍔″櫒绔槸閫氳繃AMD鍒嗗彂澶勭悊鐨勮繕鏄悓姝ュ湴澶勭悊鐨勩傚綋闇瑕佷嬌鐢ˋMI鍜孉MD鏃訛紝涓嶇敤淇敼Slice銆?/p>
緇撴潫璇細(xì)
鎴戜滑甯屾湜涓婇潰鐨勮В閲婅兘鍙︿綘嬋鍙戜綘瀵笽ce鐨勫叴瓚c傚鏋滀綘鏈変換浣曠殑闂鎴栬В閲婏紝鎴戜滑浼?xì)閭(gè)璇蜂綘鍔犲叆鎴戜滑鐨勯偖浠跺垪琛ㄣ傛垜浠殑鐩爣鏄笉鏂湴鏀硅繘Ice錛屽洜姝や綘鐨勫弽棣堝鎴戜滑鏉ヨ鏄緢鏈変環(huán)鍊肩殑銆?/p>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 gigaboy緲昏瘧瀹屾垚浜?005/7/4 3:02
聽