锘??xml version="1.0" encoding="utf-8" standalone="yes"?>1769国产精品,日韩一级不卡,久久超碰97中文字幕http://www.shnenglu.com/netboy/category/3883.htmlzh-cnSun, 15 Feb 2009 06:54:35 GMTSun, 15 Feb 2009 06:54:35 GMT60鍦?C# 涓氳繃 P/Invoke 璋冪敤Win32 DLL錛堣漿錛?/title><link>http://www.shnenglu.com/netboy/archive/2009/02/15/73850.html</link><dc:creator>鐜嬪媷鑹?/dc:creator><author>鐜嬪媷鑹?/author><pubDate>Sun, 15 Feb 2009 02:50:00 GMT</pubDate><guid>http://www.shnenglu.com/netboy/archive/2009/02/15/73850.html</guid><wfw:comment>http://www.shnenglu.com/netboy/comments/73850.html</wfw:comment><comments>http://www.shnenglu.com/netboy/archive/2009/02/15/73850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/netboy/comments/commentRss/73850.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/netboy/services/trackbacks/73850.html</trackback:ping><description><![CDATA[<p>鎴?鍦ㄨ嚜宸辨渶榪戠殑緙栫▼涓敞鎰忓埌涓涓秼鍔匡紝姝f槸榪欎釜瓚嬪娍鎵嶅紩鍑烘湰鏈堢殑涓撴爮涓婚銆傛渶榪戯紝鎴戝湪鍩轟簬 Microsoft® .NET Framework 鐨勫簲鐢ㄧ▼搴忎腑瀹屾垚浜嗗ぇ閲忕殑 Win32® Interop銆傛垜騫朵笉鏄璇存垜鐨勫簲鐢ㄧ▼搴忓厖婊′簡鑷畾涔夌殑 interop 浠g爜錛屼絾鏈夋椂鎴戜細鍦?.NET Framework 綾誨簱涓鍒頒竴浜涙瑕佷絾鍙堢箒緄佷笉鍏呭垎鐨勫唴瀹癸紝閫氳繃璋冪敤璇?Windows® API錛屽彲浠ュ揩閫熷噺灝戣繖鏍風殑楹葷儲銆?/p> <p>鍥犳鎴戣涓猴紝.NET Framework 1.0 鎴?1.1 鐗堢被搴撲腑瀛樺湪浠諱綍 Windows 鎵娌℃湁鐨勫姛鑳介檺鍒墮兘涓嶈凍涓烘傛瘯绔燂紝32 浣嶇殑 Windows錛堜笉綆′綍縐嶇増鏈級鏄竴涓垚鐔熺殑鎿嶄綔緋葷粺錛屼負騫垮ぇ瀹㈡埛鏈嶅姟浜嗗崄澶氬勾銆傜浉姣斾箣涓嬶紝.NET Framework 鍗存槸涓涓柊浜嬬墿銆?/p> <p>闅忕潃瓚婃潵瓚婂鐨勫紑鍙戜漢鍛樺皢鐢熶駭搴旂敤紼嬪簭杞埌鎵樼浠g爜錛屽紑鍙戜漢鍛樻洿棰戠箒鍦扮爺絀跺簳灞傛搷浣滅郴緇熶互鍥炬壘鍑轟竴浜涘叧閿姛鑳芥樉寰楀緢鑷劧 鈥?鑷沖皯鐩墠鏄姝ゃ?/p> <p>鍊煎緱搴嗗垢鐨勬槸錛屽叕鍏辮璦榪愯搴?(CLR) 鐨?interop 鍔熻兘錛堢О涓哄鉤鍙拌皟鐢? (P/Invoke)錛夐潪甯稿畬鍠勩傚湪鏈笓鏍忎腑錛屾垜灝嗛噸鐐逛粙緇嶅浣曞疄闄呬嬌鐢?P/Invoke 鏉ヨ皟鐢?Windows API 鍑芥暟銆傚綋鎸?CLR 鐨? COM Interop 鍔熻兘鏃訛紝P/Invoke 褰撲綔鍚嶈瘝浣跨敤錛涘綋鎸囪鍔熻兘鐨勪嬌鐢ㄦ椂錛屽垯灝嗗叾褰撲綔鍔ㄨ瘝浣跨敤銆傛垜騫朵笉鎵撶畻鐩存帴浠嬬粛 COM Interop錛屽洜涓哄畠姣?P/Invoke 鍏鋒湁鏇村ソ鐨勫彲璁塊棶鎬э紝鍗存洿鍔犲鏉傦紝榪欐湁鐐硅嚜鐩哥煕鐩撅紝榪欎嬌寰楀皢 COM Interop 浣滀負涓撴爮涓婚鏉ヨ璁轟笉澶畝鏄庢壖瑕併?/p> <p>璧拌繘 P/Invoke</p> <p>棣栧厛浠庤冨療涓涓畝鍗曠殑 P/Invoke 紺轟緥寮濮嬨傝鎴戜滑鐪嬩竴鐪嬪浣曡皟鐢?Win32 MessageBeep 鍑芥暟錛屽畠鐨勯潪鎵樼澹版槑濡備互涓嬩唬鐮佹墍紺猴細 </p> <pre class="codeSample">BOOL MessageBeep(<br><br> UINT uType // beep type<br><br>);<br><br></pre> <p>涓轟簡璋冪敤 MessageBeep錛屾偍闇瑕佸湪 C# 涓皢浠ヤ笅浠g爜娣誨姞鍒頒竴涓被鎴栫粨鏋勫畾涔変腑錛?</p> <pre class="codeSample">[DllImport("User32.dll")]<br><br>static extern Boolean MessageBeep(UInt32 beepType);<br><br></pre> <p>浠や漢鎯婅鐨勬槸錛屽彧闇瑕佽繖孌典唬鐮佸氨鍙互浣挎墭綆′唬鐮佽皟鐢ㄩ潪鎵樼鐨?MessageBeep API銆傚畠涓嶆槸涓涓柟娉曡皟鐢紝鑰屾槸涓涓閮ㄦ柟娉曞畾涔夈傦紙鍙﹀錛屽畠鎺ヨ繎浜庝竴涓潵鑷?C 鑰?C# 鍏佽鐨勭洿鎺ョ鍙o紝鍥犳浠ュ畠涓鴻搗鐐規潵浠嬬粛涓浜涙蹇墊槸鏈夊府鍔╃殑銆傦級鏉ヨ嚜鎵樼浠g爜鐨勫彲鑳借皟鐢ㄥ涓嬫墍紺猴細 </p> <pre class="codeSample">MessageBeep(0);<br><br></pre> <p>璇鋒敞鎰忥紝鐜板湪 MessageBeep 鏂規硶琚0鏄庝負 static銆傝繖鏄?P/Invoke 鏂規硶鎵瑕佹眰鐨勶紝鍥犱負鍦ㄨ Windows API 涓病鏈変竴鑷寸殑瀹炰緥姒傚康銆傛帴涓嬫潵錛岃繕瑕佹敞鎰忚鏂規硶琚爣璁頒負 extern銆傝繖鏄彁紺虹紪璇戝櫒璇ユ柟娉曟槸閫氳繃涓涓粠 DLL 瀵煎嚭鐨勫嚱鏁板疄鐜扮殑錛屽洜姝や笉闇瑕佹彁渚涙柟娉曚綋銆?/p> <p>璇村埌緙哄皯鏂規硶浣擄紝鎮ㄦ槸鍚︽敞鎰忓埌 MessageBeep 澹版槑騫舵病鏈夊寘鍚竴涓柟娉曚綋錛熶笌澶у鏁扮畻娉曠敱涓棿璇█ (IL) 鎸囦護緇勬垚鐨勬墭綆℃柟娉曚笉鍚岋紝P/Invoke 鏂規硶鍙槸鍏冩暟鎹紝瀹炴椂 (JIT) 緙栬瘧鍣ㄥ湪榪愯鏃墮氳繃瀹冨皢鎵樼浠g爜涓庨潪鎵樼鐨?DLL 鍑芥暟榪炴帴璧鋒潵銆傛墽琛岃繖縐嶅埌闈炴墭綆′笘鐣岀殑榪炴帴鎵闇鐨勪竴涓噸瑕佷俊鎭氨鏄鍑洪潪鎵樼鏂規硶鐨?DLL 鐨勫悕縐般傝繖涓淇℃伅鏄敱 MessageBeep 鏂規硶澹版槑涔嬪墠鐨?DllImport 鑷畾涔夊睘鎬ф彁渚涚殑銆傚湪鏈緥涓紝鍙互鐪嬪埌錛孧essageBeep 闈炴墭綆?API 鏄敱 Windows 涓殑 User32.dll 瀵煎嚭鐨勩?/p> <p>鍒扮幇鍦ㄤ負姝紝鍏充簬璋冪敤 MessageBeep 灝卞墿涓や釜璇濋娌℃湁浠嬬粛錛岃鍥為【涓涓嬶紝璋冪敤鐨勪唬鐮佷笌浠ヤ笅鎵紺轟唬鐮佺墖孌甸潪甯哥浉浼鹼細 </p> <pre class="codeSample">[DllImport("User32.dll")]<br><br>static extern Boolean MessageBeep(UInt32 beepType);<br><br></pre> <p>鏈鍚庤繖涓や釜璇濋鏄笌鏁版嵁灝侀佸鐞?(data marshaling) 鍜屼粠鎵樼浠g爜鍒伴潪鎵樼鍑芥暟鐨勫疄闄呮柟娉曡皟鐢ㄦ湁鍏崇殑璇濋銆傝皟鐢ㄩ潪鎵樼 MessageBeep 鍑芥暟鍙互鐢辨壘鍒頒綔鐢ㄥ煙鍐呯殑extern MessageBeep 澹版槑鐨勪換浣曟墭綆′唬鐮佹墽琛屻傝璋冪敤綾諱技浜庝換浣曞叾浠栧闈欐佹柟娉曠殑璋冪敤銆傚畠涓庡叾浠栦換浣曟墭綆℃柟娉曡皟鐢ㄧ殑鍏卞悓涔嬪鍦ㄤ簬甯︽潵浜嗘暟鎹皝閫佸鐞嗙殑闇瑕併?</p> <p>C# 鐨勮鍒欎箣涓鏄畠鐨勮皟鐢ㄨ娉曞彧鑳借闂?CLR 鏁版嵁綾誨瀷錛屼緥濡?System.UInt32 鍜?System.Boolean銆侰# 鏄劇劧涓嶈瘑鍒?Windows API 涓嬌鐢ㄧ殑鍩轟簬 C 鐨勬暟鎹被鍨嬶紙渚嬪 UINT 鍜?BOOL錛夛紝榪欎簺綾誨瀷鍙槸 C 璇█綾誨瀷鐨勭被鍨嬪畾涔夎屽凡銆傛墍浠ュ綋 Windows API 鍑芥暟 MessageBeep 鎸変互涓嬫柟寮忕紪鍐欐椂 </p> <pre class="codeSample">BOOL MessageBeep( UINT uType )<br><br></pre> <p>澶栭儴鏂規硶灝卞繀欏諱嬌鐢?CLR 綾誨瀷鏉ュ畾涔夛紝濡傛偍鍦ㄥ墠闈㈢殑浠g爜鐗囨涓墍鐪嬪埌鐨勩傞渶瑕佷嬌鐢ㄤ笌鍩虹 API 鍑芥暟綾誨瀷涓嶅悓浣嗕笌涔嬪吋瀹圭殑 CLR 綾誨瀷鏄?P/Invoke 杈冮毦浣跨敤鐨勪竴涓柟闈€傚洜姝わ紝鍦ㄦ湰涓撴爮鐨勫悗闈㈡垜灝嗙敤瀹屾暣鐨勭珷鑺傛潵浠嬬粛鏁版嵁灝侀佸鐞嗐?</p> <p>鏍峰紡</p> <p>鍦?C# 涓 Windows API 榪涜 P/Invoke 璋冪敤鏄緢綆鍗曠殑銆備絾濡傛灉綾誨簱鎷掔粷浣挎偍鐨勫簲鐢ㄧ▼搴忓彂鍑哄槦澹幫紝搴旇鎯蟲柟璁炬硶璋冪敤 Windows 浣垮畠榪涜榪欓」宸ヤ綔錛屾槸鍚楋紵</p> <p>鏄殑銆備絾鏄笌閫夋嫨鐨勬柟娉曟湁鍏籌紝鑰屼笖鍏崇郴鐢氬ぇ錛侀氬父錛屽鏋滅被搴撴彁渚涙煇縐嶉斿緞鏉ュ疄鐜版偍鐨勬剰鍥撅紝鍒欐渶濂戒嬌鐢?API 鑰屼笉瑕佺洿鎺ヨ皟鐢ㄩ潪鎵樼浠g爜錛屽洜涓? CLR 綾誨瀷鍜?Win32 涔嬮棿鍦ㄦ牱寮忎笂鏈夊緢澶х殑涓嶅悓銆傛垜鍙互灝嗗叧浜庤繖涓棶棰樼殑寤鴻褰掔粨涓轟竴鍙ヨ瘽銆傚綋鎮ㄨ繘琛?P/Invoke 鏃訛紝涓嶈浣垮簲鐢ㄧ▼搴忛昏緫鐩存帴灞炰簬浠諱綍澶栭儴鏂規硶鎴栧叾涓殑鏋勪歡銆傚鏋滄偍閬靛驚榪欎釜灝忚鍒欙紝浠庨暱榪滅湅緇忓父浼氱渷鍘昏澶氱殑楹葷儲銆?/p> <p>鍥?1 涓殑浠g爜鏄劇ず浜嗘垜鎵璁ㄨ鐨?MessageBeep 澶栭儴鏂規硶鐨勬渶灝戦檮鍔犱唬鐮併傚浘 1 涓茍娌℃湁浠諱綍鏄捐憲鐨勫彉鍖栵紝鑰屽彧鏄鏃犲寘瑁呯殑澶栭儴鏂規硶榪涜涓浜涙櫘閫氱殑鏀硅繘錛岃繖鍙互浣垮伐浣滄洿鍔犺交鏉句竴浜涖備粠欏墮儴寮濮嬶紝鎮ㄤ細娉ㄦ剰鍒頒竴涓悕涓?Sound 鐨勫畬鏁寸被鍨嬶紝瀹冧笓鐢ㄤ簬 MessageBeep銆傚鏋滄垜闇瑕佷嬌鐢?Windows API 鍑芥暟 PlaySound 鏉ユ坊鍔犲鎾斁娉㈠艦鐨勬敮鎸侊紝鍒欏彲浠ラ噸鐢?Sound 綾誨瀷銆傜劧鑰岋紝鎴戜笉浼氬洜鍏紑鍗曚釜鍏叡闈欐佹柟娉曠殑綾誨瀷鑰岀敓姘斻傛瘯绔熻繖鍙槸搴旂敤紼嬪簭浠g爜鑰屽凡銆傝繕搴旇娉ㄦ剰鍒幫紝Sound 鏄瘑灝佺殑錛屽茍瀹氫箟浜嗕竴涓┖鐨勭鏈夋瀯閫犲嚱鏁般傝繖浜涘彧鏄竴浜涚粏鑺傦紝鐩殑鏄嬌鐢ㄦ埛涓嶄細閿欒鍦頒粠 Sound 媧劇敓綾繪垨鑰呭垱寤哄畠鐨勫疄渚嬨?/p> <p>鍥?1 涓殑浠g爜鐨勪笅涓涓壒寰佹槸錛孭/Invoke 鍑虹幇浣嶇疆鐨勫疄闄呭閮ㄦ柟娉曟槸 Sound 鐨勭鏈夋柟娉曘傝繖涓柟娉曞彧鏄敱鍏叡 MessageBeep 鏂規硶闂存帴鍏紑錛屽悗鑰呮帴鍙?BeepTypes 綾誨瀷鐨勫弬鏁般傝繖涓棿鎺ョ殑棰濆灞傛槸涓涓緢鍏抽敭鐨勭粏鑺傦紝瀹冩彁渚涗簡浠ヤ笅濂藉銆傞鍏堬紝搴旇鍦ㄧ被搴撲腑寮曞叆涓涓湭鏉ョ殑 beep 鎵樼鏂規硶錛屽彲浠ラ噸澶嶅湴閫氳繃鍏叡 MessageBeep 鏂規硶鏉ヤ嬌鐢ㄦ墭綆?API錛岃屼笉蹇呮洿鏀瑰簲鐢ㄧ▼搴忎腑鐨勫叾浣欎唬鐮併?/p> <p>璇ュ寘瑁呮柟娉曠殑絎簩涓ソ澶勬槸錛氬綋鎮ㄨ繘琛?P/Invoke 璋冪敤鏃訛紝鎮ㄦ斁寮冧簡鍏嶅彈璁塊棶鍐茬獊鍜屽叾浠栦綆綰х牬鍧忕殑鏉冨埄錛岃繖閫氬父鏄敱 CLR 鎻愪緵鐨勩傜紦鍐叉柟娉曞彲浠ヤ繚鎶ゆ偍鐨勫簲鐢ㄧ▼搴忕殑鍏朵綑閮ㄥ垎鍏嶅彈璁塊棶鍐茬獊鍙婄被浼奸棶棰樼殑褰卞搷錛堝嵆浣垮畠涓嶅仛浠諱綍浜嬭屽彧鏄紶閫掑弬鏁幫級銆傝緙撳啿鏂規硶灝嗙敱 P/Invoke 璋冪敤寮曞叆鐨勪換浣曟綔鍦ㄧ殑閿欒鏈湴鍖栥?/p> <p>灝嗙鏈夊閮ㄦ柟娉曢殣钘忓湪鍏叡鍖呰鍚庨潰鐨勭涓夊悓鏃朵篃鏄渶鍚庣殑涓涓ソ澶勬槸錛屾彁渚涗簡鍚戣鏂規硶娣誨姞涓浜涙渶灝忕殑 CLR 鏍峰紡鐨勬満浼氥備緥濡傦紝鍦ㄥ浘 1 涓紝鎴戝皢 Windows API 鍑芥暟榪斿洖鐨?Boolean 澶辮觸杞崲鎴愭洿鍍?CLR 鐨勫紓甯搞傛垜榪樺畾涔変簡涓涓悕涓?BeepTypes 鐨勬灇涓劇被鍨嬶紝瀹冪殑鎴愬憳瀵瑰簲浜庡悓璇?Windows API 涓璧蜂嬌鐢ㄧ殑瀹氫箟鍊箋傜敱浜?C# 涓嶆敮鎸佸畾涔夛紝鍥犳鍙互浣跨敤鎵樼鏋氫婦綾誨瀷鏉ラ伩鍏嶅夠鏁板悜鏁翠釜搴旂敤紼嬪簭浠g爜鎵╂暎銆?/p> <p>鍖呰鏂規硶鐨勬渶鍚庝竴涓ソ澶勫浜庣畝鍗曠殑 Windows API 鍑芥暟錛堝 MessageBeep錛夎瘹鐒舵槸寰笉瓚抽亾鐨勩備絾鏄綋鎮ㄥ紑濮嬭皟鐢ㄦ洿澶嶆潅鐨勯潪鎵樼鍑芥暟鏃訛紝鎮ㄤ細鍙戠幇錛屾墜鍔ㄥ皢 Windows API 鏍峰紡杞崲鎴愬 CLR 鏇村姞鍙嬪ソ鐨勬柟娉曟墍甯︽潵鐨勫ソ澶勪細瓚婃潵瓚婂銆傝秺鏄墦綆楀湪鏁翠釜搴旂敤紼嬪簭涓噸鐢?interop 鍔熻兘錛岃秺鏄簲璇ヨ鐪熷湴鑰冭檻鍖呰鐨勮璁°傚悓鏃舵垜璁や負錛屽湪闈為潰鍚戝璞$殑闈欐佸寘瑁呮柟娉曚腑浣跨敤瀵?CLR 鍙嬪ソ鐨勫弬鏁頒篃騫墮潪涓嶅彲浠ャ?/p> <p>DLL Import 灞炴?/p> <p>鐜板湪鏄洿娣卞叆鍦拌繘琛屾帰璁ㄧ殑鏃跺欎簡銆傚湪瀵規墭綆′唬鐮佽繘琛?P/Invoke 璋冪敤鏃訛紝DllImportAttribute 綾誨瀷鎵紨鐫閲嶈鐨勮鑹層侱llImportAttribute 鐨勪富瑕佷綔鐢ㄦ槸緇?CLR 鎸囩ず鍝釜 DLL 瀵煎嚭鎮ㄦ兂瑕佽皟鐢ㄧ殑鍑芥暟銆傜浉鍏?DLL 鐨勫悕縐拌浣滀負涓涓瀯閫犲嚱鏁板弬鏁頒紶閫掔粰 DllImportAttribute銆?/p> <p>濡傛灉鎮ㄦ棤娉曡偗瀹氬摢涓?DLL 瀹氫箟浜嗘偍瑕佷嬌鐢ㄧ殑 Windows API 鍑芥暟錛孭latform SDK 鏂囨。灝嗕負鎮ㄦ彁渚涙渶濂界殑甯姪璧勬簮銆傚湪 Windows API 鍑芥暟涓婚鏂囧瓧涓磋繎緇撳熬鐨勪綅緗紝SDK 鏂囨。鎸囧畾浜?C 搴旂敤紼嬪簭瑕佷嬌鐢ㄨ鍑芥暟蹇呴』閾炬帴鐨?.lib 鏂囦歡銆傚湪鍑犱箮鎵鏈夌殑鎯呭喌涓嬶紝璇?.lib 鏂囦歡鍏鋒湁涓庡畾涔夎鍑芥暟鐨勭郴緇?DLL 鏂囦歡鐩稿悓鐨勫悕縐般備緥濡傦紝濡傛灉璇ュ嚱鏁伴渶瑕?C 搴旂敤紼嬪簭閾炬帴鍒? Kernel32.lib錛屽垯璇ュ嚱鏁板氨瀹氫箟鍦?Kernel32.dll 涓傛偍鍙互鍦?MessageBeep 涓壘鍒版湁鍏?MessageBeep 鐨?Platform SDK 鏂囨。涓婚銆傚湪璇ヤ富棰樼粨灝懼錛屾偍浼氭敞鎰忓埌瀹冩寚鍑哄簱鏂囦歡鏄?User32.lib錛涜繖琛ㄦ槑 MessageBeep 鏄粠 User32.dll 涓鍑虹殑銆?/p> <p>鍙夌殑 DllImportAttribute 灞炴?/p> <p>闄や簡鎸囧嚭瀹夸富 DLL 澶栵紝DllImportAttribute 榪樺寘鍚簡涓浜涘彲閫夊睘鎬э紝鍏朵腑鍥涗釜鐗瑰埆鏈夎叮錛欵ntryPoint銆丆harSet銆丼etLastError 鍜?CallingConvention銆?/p> <p>EntryPoint 鍦ㄤ笉甯屾湜澶栭儴鎵樼鏂規硶鍏鋒湁涓?DLL 瀵煎嚭鐩稿悓鐨勫悕縐扮殑鎯呭喌涓嬶紝鍙互璁劇疆璇ュ睘鎬ф潵鎸囩ず瀵煎嚭鐨?DLL 鍑芥暟鐨勫叆鍙g偣鍚嶇О銆傚綋鎮ㄥ畾涔変袱涓皟鐢ㄧ浉鍚岄潪鎵樼鍑芥暟鐨勫閮ㄦ柟娉曟椂錛岃繖鐗瑰埆鏈夌敤銆傚彟澶栵紝鍦?Windows 涓繕鍙互閫氳繃瀹冧滑鐨勫簭鍙峰肩粦瀹氬埌瀵煎嚭鐨? DLL 鍑芥暟銆傚鏋滄偍闇瑕佽繖鏍峰仛錛屽垯璇稿“#1”鎴?#8220;#129”鐨?EntryPoint 鍊兼寚紺?DLL 涓潪鎵樼鍑芥暟鐨勫簭鍙峰艱屼笉鏄嚱鏁板悕銆?/p> <p>CharSet 瀵逛簬瀛楃闆嗭紝騫墮潪鎵鏈夌増鏈殑 Windows 閮芥槸鍚屾牱鍒涘緩鐨勩俉indows 9x 緋誨垪浜у搧緙哄皯閲嶈鐨?Unicode 鏀寔錛岃?Windows NT 鍜?Windows CE 緋誨垪鍒欎竴寮濮嬪氨浣跨敤 Unicode銆傚湪榪欎簺鎿嶄綔緋葷粺涓婅繍琛岀殑 CLR 灝哢nicode 鐢ㄤ簬 String 鍜?Char 鏁版嵁鐨勫唴閮ㄨ〃紺恒備絾涔熶笉蹇呮媴蹇?鈥?褰撹皟鐢?Windows 9x API 鍑芥暟鏃訛紝CLR 浼氳嚜鍔ㄨ繘琛屽繀瑕佺殑杞崲錛屽皢鍏朵粠 Unicode杞崲涓?ANSI銆?/p> <p>濡傛灉 DLL 鍑芥暟涓嶄互浠諱綍鏂瑰紡澶勭悊鏂囨湰錛屽垯鍙互蹇界暐 DllImportAttribute 鐨?CharSet 灞炴с傜劧鑰岋紝褰?Char 鎴?String 鏁版嵁鏄瓑寮忕殑涓閮ㄥ垎鏃訛紝搴旇灝?CharSet 灞炴ц緗負 CharSet.Auto銆傝繖鏍峰彲浠ヤ嬌 CLR 鏍規嵁瀹夸富 OS 浣跨敤閫傚綋鐨勫瓧絎﹂泦銆傚鏋滄病鏈夋樉寮忓湴璁劇疆 CharSet 灞炴э紝鍒欏叾榛樿鍊間負 CharSet.Ansi銆傝繖涓粯璁ゅ兼槸鏈夌己鐐圭殑錛屽洜涓哄浜庡湪 Windows 2000銆乄indows XP 鍜?Windows NT® 涓婅繘琛岀殑 interop 璋冪敤錛屽畠浼氭秷鏋佸湴褰卞搷鏂囨湰鍙傛暟灝侀佸鐞嗙殑鎬ц兘銆?/p> <p>搴旇鏄懼紡鍦伴夋嫨 CharSet.Ansi 鎴?CharSet.Unicode 鐨?CharSet 鍊艱屼笉鏄嬌鐢?CharSet.Auto 鐨勫敮涓鎯呭喌鏄細鎮ㄦ樉寮忓湴鎸囧畾浜嗕竴涓鍑哄嚱鏁幫紝鑰岃鍑芥暟鐗瑰畾浜庤繖涓ょ Win32 OS 涓殑鏌愪竴縐嶃俁eadDirectoryChangesW API 鍑芥暟灝辨槸榪欐牱鐨勪竴涓緥瀛愶紝瀹冨彧瀛樺湪浜庡熀浜?Windows NT 鐨勬搷浣滅郴緇熶腑錛屽茍涓斿彧鏀寔 Unicode錛涘湪榪欑鎯呭喌涓嬶紝鎮ㄥ簲璇ユ樉寮忓湴浣跨敤 CharSet.Unicode銆?/p> <p>鏈夋椂錛學indows API 鏄惁鏈夊瓧絎﹂泦鍏崇郴騫朵笉鏄庢樉銆備竴縐嶅喅涓嶄細鏈夐敊鐨勭‘璁ゆ柟娉曟槸鍦?Platform SDK 涓鏌ヨ鍑芥暟鐨?C 璇█澶存枃浠躲傦紙濡傛灉鎮ㄦ棤娉曡偗瀹氳鐪嬪摢涓ご鏂囦歡錛屽垯鍙互鏌ョ湅 Platform SDK 鏂囨。涓垪鍑虹殑姣忎釜 API 鍑芥暟鐨勫ご鏂囦歡銆傦級濡傛灉鎮ㄥ彂鐜拌 API 鍑芥暟紜疄瀹氫箟涓轟竴涓槧灝勫埌浠?A 鎴?W 緇撳熬鐨勫嚱鏁板悕鐨勫畯錛屽垯瀛楃闆嗕笌鎮ㄥ皾璇曡皟鐢ㄧ殑鍑芥暟鏈夊叧緋匯俉indows API 鍑芥暟鐨勪竴涓緥瀛愭槸鍦? WinUser.h 涓0鏄庣殑 GetMessage API錛屾偍涔熻浼氭儕璁跺湴鍙戠幇瀹冩湁 A 鍜?W 涓ょ鐗堟湰銆?/p> <p>SetLastError 閿欒澶勭悊闈炲父閲嶈錛屼絾鍦ㄧ紪紼嬫椂緇忓父琚仐蹇樸傚綋鎮ㄨ繘琛?P/Invoke 璋冪敤鏃訛紝涔熶細闈復鍏朵粬鐨勬寫鎴?鈥?澶勭悊鎵樼浠g爜涓?Windows API 閿欒澶勭悊鍜屽紓甯鎬箣闂寸殑鍖哄埆銆傛垜鍙互緇欐偍涓鐐瑰緩璁?/p> <p>濡傛灉鎮ㄦ鍦ㄤ嬌鐢?P/Invoke 璋冪敤 Windows API 鍑芥暟錛岃屽浜庤鍑芥暟錛屾偍浣跨敤 GetLastError 鏉ユ煡鎵炬墿灞曠殑閿欒淇℃伅錛屽垯搴旇鍦ㄥ閮ㄦ柟娉曠殑 DllImportAttribute 涓皢 SetLastError 灞炴ц緗負 true銆傝繖閫傜敤浜庡ぇ澶氭暟澶栭儴鏂規硶銆?/p> <p>榪欎細瀵艱嚧 CLR 鍦ㄦ瘡嬈¤皟鐢ㄥ閮ㄦ柟娉曚箣鍚庣紦瀛樼敱 API 鍑芥暟璁劇疆鐨勯敊璇傜劧鍚庯紝鍦ㄥ寘瑁呮柟娉曚腑錛屽彲浠ラ氳繃璋冪敤綾誨簱鐨? System.Runtime.InteropServices.Marshal 綾誨瀷涓畾涔夌殑 Marshal.GetLastWin32Error 鏂規硶鏉ヨ幏鍙栫紦瀛樼殑閿欒鍊箋傛垜鐨勫緩璁槸媯鏌ヨ繖浜涙湡鏈涙潵鑷?API 鍑芥暟鐨勯敊璇鹼紝騫朵負榪欎簺鍊煎紩鍙戜竴涓彲鎰熺煡鐨勫紓甯搞傚浜庡叾浠栨墍鏈夊け璐ユ儏鍐碉紙鍖呮嫭鏍規湰灝辨病鎰忔枡鍒扮殑澶辮觸鎯呭喌錛夛紝鍒欏紩鍙戝湪 System.ComponentModel 鍛藉悕絀洪棿涓畾涔夌殑 Win32Exception錛屽茍灝? Marshal.GetLastWin32Error 榪斿洖鐨勫間紶閫掔粰瀹冦傚鏋滄偍鍥炲ご鐪嬩竴涓嬪浘 1 涓殑浠g爜錛屾偍浼氱湅鍒版垜鍦?extern MessageBeep 鏂規硶鐨勫叕鍏卞寘瑁呬腑灝遍噰鐢ㄤ簡榪欑鏂規硶銆?/p> <p>CallingConvention 鎴戝皢鍦ㄦ浠嬬粛鐨勬渶鍚庝篃鍙兘鏄渶涓嶉噸瑕佺殑涓涓?DllImportAttribute 灞炴ф槸 CallingConvention銆傞氳繃姝ゅ睘鎬э紝鍙互緇?CLR 鎸囩ず搴旇灝嗗摢縐嶅嚱鏁拌皟鐢ㄧ害瀹氱敤浜庡爢鏍堜腑鐨勫弬鏁般侰allingConvention.Winapi 鐨勯粯璁ゅ兼槸鏈濂界殑閫夋嫨錛屽畠鍦ㄥぇ澶氭暟鎯呭喌涓嬮兘鍙銆傜劧鑰岋紝濡傛灉璇ヨ皟鐢ㄤ笉璧蜂綔鐢紝鍒欏彲浠ユ鏌?Platform SDK 涓殑澹版槑澶存枃浠訛紝鐪嬬湅鎮ㄨ皟鐢ㄧ殑 API 鍑芥暟鏄惁鏄竴涓笉絎﹀悎璋冪敤綰﹀畾鏍囧噯鐨勫紓甯?API銆?/p> <p>閫氬父錛屾湰鏈哄嚱鏁幫紙渚嬪 Windows API 鍑芥暟鎴?C- 榪愯鏃?DLL 鍑芥暟錛夌殑璋冪敤綰﹀畾鎻忚堪浜嗗浣曞皢鍙傛暟鎺ㄥ叆綰跨▼鍫嗘爤鎴栦粠綰跨▼鍫嗘爤涓竻闄ゃ傚ぇ澶氭暟 Windows API 鍑芥暟閮芥槸棣栧厛灝嗗嚱鏁扮殑鏈鍚庝竴涓弬鏁版帹鍏ュ爢鏍堬紝鐒跺悗鐢辮璋冪敤鐨勫嚱鏁拌礋璐f竻鐞嗚鍫嗘爤銆傜浉鍙嶏紝璁稿 C-榪愯鏃?DLL 鍑芥暟閮借瀹氫箟涓烘寜鐓ф柟娉曞弬鏁板湪鏂規硶絳懼悕涓嚭鐜扮殑欏哄簭灝嗗叾鎺ㄥ叆鍫嗘爤錛屽皢鍫嗘爤娓呯悊宸ヤ綔浜ょ粰璋冪敤鑰呫?/p> <p>騫歌繍鐨勬槸錛岃璁?P/Invoke 璋冪敤宸ヤ綔鍙渶瑕佽澶栧洿璁懼鐞嗚В璋冪敤綰﹀畾鍗沖彲銆傞氬父錛屼粠榛樿鍊? CallingConvention.Winapi 寮濮嬫槸鏈濂界殑閫夋嫨銆傜劧鍚庯紝鍦?C 榪愯鏃?DLL 鍑芥暟鍜屽皯鏁板嚱鏁頒腑錛屽彲鑳介渶瑕佸皢綰﹀畾鏇存敼涓? CallingConvention.Cdecl銆?/p> <p>鏁版嵁灝侀佸鐞?/p> <p>鏁版嵁灝侀佸鐞嗘槸 P/Invoke 鍏鋒湁鎸戞垬鎬х殑鏂歸潰銆傚綋鍦ㄦ墭綆″拰闈炴墭綆′唬鐮佷箣闂翠紶閫掓暟鎹椂錛孋LR 閬靛驚璁稿瑙勫垯錛屽緢灝戞湁寮鍙戜漢鍛樹細緇忓父閬囧埌瀹冧滑鐩磋嚦鍙皢榪欎簺瑙勫垯璁頒綇銆傞櫎闈炴偍鏄竴鍚嶇被搴撳紑鍙戜漢鍛橈紝鍚﹀垯鍦ㄩ氬父鎯呭喌涓嬫病鏈夊繀瑕佹帉鎻″叾緇嗚妭銆備負浜嗘渶鏈夋晥鍦板湪 CLR 涓婁嬌鐢?P/Invoke錛屽嵆浣垮彧鍋跺皵闇瑕?interop 鐨勫簲鐢ㄧ▼搴忓紑鍙戜漢鍛樹粛鐒跺簲璇ョ悊瑙f暟鎹皝閫佸鐞嗙殑涓浜涘熀紜鐭ヨ瘑銆?/p> <p>鍦ㄦ湰鏈堜笓鏍忕殑鍓╀綑閮ㄥ垎涓紝鎴戝皢璁ㄨ綆鍗曟暟瀛楀拰瀛楃涓叉暟鎹殑鏁版嵁灝侀佸鐞嗐傛垜灝嗕粠鏈鍩烘湰鐨勬暟瀛楁暟鎹皝閫佸鐞嗗紑濮嬶紝鐒跺悗浠嬬粛綆鍗曠殑鎸囬拡灝侀佸鐞嗗拰瀛楃涓插皝閫佸鐞嗐?/p> <p>灝侀佹暟瀛楀拰閫昏緫鏍囬噺</p> <p>Windows OS 澶ч儴鍒嗘槸鐢?C 緙栧啓鐨勩傚洜姝わ紝Windows API 鎵鐢ㄥ埌鐨勬暟鎹被鍨嬭涔堟槸 C 綾誨瀷錛岃涔堟槸閫氳繃綾誨瀷瀹氫箟鎴栧畯瀹氫箟閲嶆柊鏍囪鐨?C 綾誨瀷銆傝鎴戜滑鐪嬬湅娌℃湁鎸囬拡鐨勬暟鎹皝閫佸鐞嗐傜畝鍗曡搗瑙侊紝棣栧厛閲嶇偣璁ㄨ鐨勬槸鏁板瓧鍜屽竷灝斿箋?/p> <p>褰撻氳繃鍊煎悜 Windows API 鍑芥暟浼犻掑弬鏁版椂錛岄渶瑕佺煡閬撲互涓嬮棶棰樼殑絳旀錛?</p> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="listBullet" valign="top">•</td> <td class="listItem"> <p>鏁版嵁浠庢牴鏈笂璁叉槸鏁村瀷鐨勮繕鏄誕鐐瑰瀷鐨勶紵 </p> </td> </tr> <tr> <td class="listBullet" valign="top">•</td> <td class="listItem"> <p>濡傛灉鏁版嵁鏄暣鍨嬬殑錛屽垯瀹冩槸鏈夌鍙風殑榪樻槸鏃犵鍙風殑錛?</p> </td> </tr> <tr> <td class="listBullet" valign="top">•</td> <td class="listItem"> <p>濡傛灉鏁版嵁鏄暣鍨嬬殑錛屽垯瀹冪殑浣嶆暟鏄灝戯紵 </p> </td> </tr> <tr> <td class="listBullet" valign="top">•</td> <td class="listItem"> <p>濡傛灉鏁版嵁鏄誕鐐瑰瀷鐨勶紝鍒欏畠鏄崟綺懼害鐨勮繕鏄弻綺懼害鐨勶紵</p> </td> </tr> </tbody> </table> <p>鏈夋椂絳旀寰堟槑鏄撅紝浣嗘湁鏃跺嵈涓嶆槑鏄俱俉indows API 浠ュ悇縐嶆柟寮忛噸鏂板畾涔変簡鍩烘湰鐨?C 鏁版嵁綾誨瀷銆傚浘 2 鍒楀嚭浜?C 鍜?Win32 鐨勪竴浜涘叕鍏辨暟鎹被鍨嬪強鍏惰鑼冿紝浠ュ強涓涓叿鏈夊尮閰嶈鑼冪殑鍏叡璇█榪愯搴撶被鍨嬨?</p> <p>閫氬父錛屽彧瑕佹偍閫夋嫨涓涓叾瑙勮寖涓庤鍙傛暟鐨?Win32 綾誨瀷鐩稿尮閰嶇殑 CLR 綾誨瀷錛屾偍鐨勪唬鐮佸氨鑳藉姝e父宸ヤ綔銆備笉榪囦篃鏈変竴浜涚壒渚嬨備緥濡傦紝鍦? Windows API 涓畾涔夌殑 BOOL 綾誨瀷鏄竴涓湁絎﹀彿鐨?32 浣嶆暣鍨嬨傜劧鑰岋紝BOOL 鐢ㄤ簬鎸囩ず Boolean 鍊?true 鎴? false銆傝櫧鐒舵偍涓嶇敤灝?BOOL 鍙傛暟浣滀負 System.Int32 鍊煎皝閫侊紝浣嗘槸濡傛灉浣跨敤 System.Boolean 綾誨瀷錛屽氨浼氳幏寰楁洿鍚堥傜殑鏄犲皠銆傚瓧絎︾被鍨嬬殑鏄犲皠綾諱技浜?BOOL錛屽洜涓烘湁涓涓壒瀹氱殑 CLR 綾誨瀷 (System.Char) 鎸囧嚭瀛楃鐨勫惈涔夈?/p> <p>鍦ㄤ簡瑙h繖浜涗俊鎭箣鍚庯紝閫愭浠嬬粛紺轟緥鍙兘鏄湁甯姪鐨勩備緷鐒墮噰鐢?beep 涓婚浣滀負渚嬪瓙錛岃鎴戜滑鏉ヨ瘯涓涓?Kernel32.dll 浣庣駭 Beep錛屽畠浼氶氳繃璁$畻鏈虹殑鎵0鍣ㄥ彂鐢熷槦澹般傝繖涓柟娉曠殑 Platform SDK 鏂囨。鍙互鍦?Beep 涓壘鍒般傛湰鏈?API 鎸変互涓嬫柟寮忚繘琛岃褰曪細 </p> <pre class="codeSample">BOOL Beep(<br><br> DWORD dwFreq, // Frequency<br><br> DWORD dwDuration // Duration in milliseconds<br><br>);<br><br></pre> <p>鍦ㄥ弬鏁板皝閫佸鐞嗘柟闈紝鎮ㄧ殑宸ヤ綔鏄簡瑙d粈涔?CLR 鏁版嵁綾誨瀷涓?Beep API 鍑芥暟鎵浣跨敤鐨?DWORD 鍜?BOOL 鏁版嵁綾誨瀷鐩稿吋瀹廣傚洖欏句竴涓嬪浘 2 涓殑鍥捐〃錛屾偍灝嗙湅鍒?DWORD 鏄竴涓?32 浣嶇殑鏃犵鍙鋒暣鏁板鹼紝濡傚悓 CLR 綾誨瀷 System.UInt32銆傝繖鎰忓懗鐫鎮ㄥ彲浠ヤ嬌鐢?UInt32 鍊間綔涓洪佸線 Beep 鐨勪袱涓弬鏁般侭OOL 榪斿洖鍊兼槸涓涓潪甯告湁瓚g殑鎯呭喌錛屽洜涓鴻鍥捐〃鍛婅瘔鎴戜滑錛屽湪 Win32 涓紝BOOL 鏄竴涓?32 浣嶇殑鏈夌鍙鋒暣鏁般傚洜姝わ紝鎮ㄥ彲浠ヤ嬌鐢? System.Int32 鍊間綔涓烘潵鑷?Beep 鐨勮繑鍥炲箋傜劧鑰岋紝CLR 涔熷畾涔変簡 System.Boolean 綾誨瀷浣滀負 Boolean 鍊肩殑璇箟錛屾墍浠ュ簲璇ヤ嬌鐢ㄥ畠鏉ユ浛浠c侰LR 榛樿灝?System.Boolean 鍊煎皝閫佷負 32 浣嶇殑鏈夌鍙鋒暣鏁般傛澶勬墍鏄劇ず鐨勫閮ㄦ柟娉曞畾涔夋槸鐢ㄤ簬 Beep 鐨勭粨鏋?P/Invoke 鏂規硶錛?</p> <pre class="codeSample">[DllImport("Kernel32.dll", SetLastError=true)]<br><br>static extern Boolean Beep(<br><br> UInt32 frequency, UInt32 duration);<br><br></pre> <p>鎸囬拡鍙傛暟</p> <p>璁稿 Windows API 鍑芥暟灝嗘寚閽堜綔涓哄畠浠殑涓涓垨澶氫釜鍙傛暟銆傛寚閽堝鍔犱簡灝侀佹暟鎹殑澶嶆潅鎬э紝鍥犱負瀹冧滑澧炲姞浜嗕竴涓棿鎺ュ眰銆傚鏋滄病鏈夋寚閽堬紝鎮ㄥ彲浠ラ氳繃鍊煎湪綰跨▼鍫嗘爤涓紶閫掓暟鎹傛湁浜嗘寚 閽堬紝鍒欏彲浠ラ氳繃寮曠敤浼犻掓暟鎹紝鏂規硶鏄皢璇ユ暟鎹殑鍐呭瓨鍦板潃鎺ㄥ叆綰跨▼鍫嗘爤涓傜劧鍚庯紝鍑芥暟閫氳繃鍐呭瓨鍦板潃闂存帴璁塊棶鏁版嵁銆備嬌鐢ㄦ墭綆′唬鐮佽〃紺烘闄勫姞闂存帴灞傜殑鏂瑰紡鏈夊 縐嶃?/p> <p>鍦?C# 涓紝濡傛灉灝嗘柟娉曞弬鏁板畾涔変負 ref 鎴?out錛屽垯鏁版嵁閫氳繃寮曠敤鑰屼笉鏄氳繃鍊間紶閫掋傚嵆浣挎偍娌℃湁浣跨敤 Interop 涔熸槸榪欐牱錛屼絾鍙槸浠庝竴涓墭綆℃柟娉曡皟鐢ㄥ埌鍙︿竴涓墭綆℃柟娉曘備緥濡傦紝濡傛灉閫氳繃 ref 浼犻?System.Int32 鍙傛暟錛屽垯鍦ㄧ嚎紼嬪爢鏍堜腑浼犻掔殑鏄鏁版嵁鐨勫湴鍧錛岃屼笉鏄暣鏁板兼湰韜備笅闈㈡槸涓涓畾涔変負閫氳繃寮曠敤鎺ユ敹鏁存暟鍊肩殑鏂規硶鐨勭ず渚嬶細 </p> <pre class="codeSample">void FlipInt32(ref Int32 num){<br><br> num = -num;<br><br>}<br><br></pre> <p>榪欓噷錛孎lipInt32 鏂規硶鑾峰彇涓涓?Int32 鍊肩殑鍦板潃銆佽闂暟鎹佸瀹冩眰鍙嶏紝鐒跺悗灝嗘眰鍙嶈繃鐨勫艱祴緇欏師濮嬪彉閲忋傚湪浠ヤ笅浠g爜涓紝FlipInt32 鏂規硶浼氬皢璋冪敤紼嬪簭鐨勫彉閲?x 鐨勫間粠 10 鏇存敼涓?-10錛?</p> <pre class="codeSample">Int32 x = 10;<br><br>FlipInt32(ref x);<br><br></pre> <p>鍦ㄦ墭綆′唬鐮佷腑鍙互閲嶇敤榪欑鑳藉姏錛屽皢鎸囬拡浼犻掔粰闈炴墭綆′唬鐮併備緥濡傦紝FileEncryptionStatus API 鍑芥暟浠?32 浣嶆棤絎﹀彿浣嶆帺鐮佺殑褰㈠紡榪斿洖鏂囦歡鍔犲瘑鐘舵併傝 API 鎸変互涓嬫墍紺烘柟寮忚繘琛岃褰曪細 </p> <pre class="codeSample">BOOL FileEncryptionStatus(<br><br> LPCTSTR lpFileName, // file name<br><br> LPDWORD lpStatus // encryption status<br><br>);<br><br></pre> <p>璇鋒敞鎰忥紝璇ュ嚱鏁板茍涓嶄嬌鐢ㄥ畠鐨勮繑鍥炲艱繑鍥炵姸鎬侊紝鑰屾槸榪斿洖涓涓?Boolean 鍊鹼紝鎸囩ず璋冪敤鏄惁鎴愬姛銆傚湪鎴愬姛鐨勬儏鍐典笅錛屽疄闄呯殑鐘舵佸兼槸閫氳繃絎簩涓弬鏁拌繑鍥炵殑銆傚畠鐨勫伐浣滄柟寮忔槸璋冪敤紼嬪簭鍚戣鍑芥暟浼犻掓寚鍚戜竴涓?DWORD 鍙橀噺鐨勬寚閽堬紝鑰岃 API 鍑芥暟鐢ㄧ姸鎬佸煎~鍏呮寚鍚戠殑鍐呭瓨浣嶇疆銆備互涓嬩唬鐮佺墖孌墊樉紺轟簡涓涓皟鐢ㄩ潪鎵樼 FileEncryptionStatus 鍑芥暟鐨勫彲鑳藉閮ㄦ柟娉曞畾涔夛細 </p> <pre class="codeSample">[DllImport("Advapi32.dll", CharSet=CharSet.Auto)]<br><br>static extern Boolean FileEncryptionStatus(String filename, <br><br> out UInt32 status);<br><br></pre> <p>璇ュ畾涔変嬌鐢?out 鍏抽敭瀛楁潵涓?UInt32 鐘舵佸兼寚紺?by-ref 鍙傛暟銆傝繖閲屾垜涔熷彲浠ラ夋嫨 ref 鍏抽敭瀛楋紝瀹為檯涓婂湪榪愯鏃朵細浜х敓鐩稿悓鐨勬満鍣ㄧ爜銆俹ut 鍏抽敭瀛楀彧鏄竴涓?by-ref 鍙傛暟鐨勮鑼冿紝瀹冨悜 C# 緙栬瘧鍣ㄦ寚紺烘墍浼犻掔殑鏁版嵁鍙湪琚皟鐢ㄧ殑鍑芥暟澶栭儴浼犻掋傜浉鍙嶏紝濡傛灉浣跨敤 ref 鍏抽敭瀛楋紝鍒欑紪璇戝櫒浼氬亣瀹氭暟鎹彲浠ュ湪琚皟鐢ㄧ殑鍑芥暟鐨勫唴閮ㄥ拰澶栭儴浼犻掋?/p> <p>鎵樼浠g爜涓?out 鍜?ref 鍙傛暟鐨勫彟涓涓緢濂界殑鏂歸潰鏄紝鍦板潃浣滀負 by-ref 鍙傛暟浼犻掔殑鍙橀噺鍙互鏄嚎紼嬪爢鏍堜腑鐨勪竴涓湰鍦板彉閲忋佷竴涓被鎴栫粨鏋勭殑鍏冪礌錛屼篃鍙互鏄叿鏈夊悎閫傛暟鎹被鍨嬬殑鏁扮粍涓殑涓涓厓绱犲紩鐢ㄣ傝皟鐢ㄧ▼搴忕殑榪欑鐏墊椿鎬т嬌寰? by-ref 鍙傛暟鎴愪負灝侀佺紦鍐插尯鎸囬拡浠ュ強鍗曟暟鍊兼寚閽堢殑涓涓緢濂界殑璧風偣銆傚彧鏈夊湪鎴戝彂鐜?ref 鎴?out 鍙傛暟涓嶇鍚堟垜鐨勯渶瑕佺殑鎯呭喌涓嬶紝鎴戞墠浼氳冭檻灝嗘寚閽堝皝閫佷負鏇村鏉傜殑 CLR 綾誨瀷錛堜緥濡傜被鎴栨暟緇勫璞★級銆?/p> <p>濡傛灉鎮ㄤ笉鐔熸倝 C 璇硶鎴栬呰皟鐢?Windows API 鍑芥暟錛屾湁鏃跺緢闅劇煡閬撲竴涓柟娉曞弬鏁版槸鍚﹂渶瑕佹寚閽堛備竴涓父瑙佺殑鎸囩ず絎︽槸鐪嬪弬鏁扮被鍨嬫槸鍚︽槸浠ュ瓧姣?P 鎴?LP 寮澶寸殑錛屼緥濡?LPDWORD 鎴? PINT銆傚湪榪欎袱涓緥瀛愪腑錛孡P 鍜?P 鎸囩ず鍙傛暟鏄竴涓寚閽堬紝鑰屽畠浠寚鍚戠殑鏁版嵁綾誨瀷鍒嗗埆涓?DWORD 鎴? INT銆傜劧鑰岋紝鍦ㄦ湁浜涙儏鍐典笅錛屽彲浠ョ洿鎺ヤ嬌鐢?C 璇█璇硶涓殑鏄熷彿 (*) 灝?API 鍑芥暟瀹氫箟涓烘寚閽堛備互涓嬩唬鐮佺墖孌靛睍紺轟簡榪欐柟闈㈢殑紺轟緥錛?</p> <pre class="codeSample">void TakesAPointer(DWORD* pNum);<br><br></pre> <p>鍙互鐪嬪埌錛屼笂榪板嚱鏁扮殑鍞竴涓涓弬鏁版槸鎸囧悜 DWORD 鍙橀噺鐨勬寚閽堛?</p> <p>褰撻氳繃 P/Invoke 灝侀佹寚閽堟椂錛宺ef 鍜?out 鍙敤浜庢墭綆′唬鐮佷腑鐨勫肩被鍨嬨傚綋涓涓弬鏁扮殑 CLR 綾誨瀷浣跨敤 struct 鍏抽敭瀛楀畾涔夋椂錛屽彲浠ヨ涓鴻鍙傛暟鏄竴涓肩被鍨嬨侽ut 鍜?ref 鐢ㄤ簬灝侀佹寚鍚戣繖浜涙暟鎹被鍨嬬殑鎸囬拡錛屽洜涓洪氬父鍊肩被鍨嬪彉閲忔槸瀵硅薄鎴栨暟鎹紝鑰屽湪鎵樼浠g爜涓茍娌℃湁瀵瑰肩被鍨嬬殑寮曠敤銆傜浉鍙嶏紝褰撳皝閫佸紩鐢ㄧ被鍨嬪璞℃椂錛屽茍涓嶉渶瑕? ref 鍜?out 鍏抽敭瀛楋紝鍥犱負鍙橀噺宸茬粡鏄璞$殑寮曠敤浜嗐?/p> <p>濡傛灉鎮ㄥ寮曠敤綾誨瀷鍜屽肩被鍨嬩箣闂寸殑宸埆涓嶆槸寰堢啛鎮夛紝璇鋒煡闃?2000 騫?12 鏈?鍙戣鐨?MSDN® Magazine錛屽湪 .NET 涓撴爮鐨勪富棰樹腑鍙互鎵懼埌鏇村淇℃伅銆傚ぇ澶氭暟 CLR 綾誨瀷閮芥槸寮曠敤綾誨瀷錛涚劧鑰岋紝闄や簡 System.String 鍜? System.Object錛屾墍鏈夌殑鍩哄厓綾誨瀷錛堜緥濡?System.Int32 鍜?System.Boolean錛夐兘鏄肩被鍨嬨?/p> <p>灝侀佷笉閫忔槑 (Opaque) 鎸囬拡錛氫竴縐嶇壒孌婃儏鍐?/p> <p>鏈夋椂鍦?Windows API 涓紝鏂規硶浼犻掓垨榪斿洖鐨勬寚閽堟槸涓嶉忔槑鐨勶紝榪欐剰鍛崇潃璇ユ寚閽堝間粠鎶鏈搴﹁鏄竴涓寚閽堬紝浣嗕唬鐮佸嵈涓嶇洿鎺ヤ嬌鐢ㄥ畠銆傜浉鍙嶏紝浠g爜灝嗚鎸囬拡榪斿洖緇?Windows 浠ヤ究闅忓悗榪涜閲嶇敤銆?/p> <p>涓涓潪甯稿父瑙佺殑渚嬪瓙灝辨槸鍙ユ焺鐨勬蹇點傚湪 Windows 涓紝鍐呴儴鏁版嵁緇撴瀯錛堜粠鏂囦歡鍒板睆騫曚笂鐨勬寜閽級鍦ㄥ簲鐢ㄧ▼搴忎唬鐮佷腑閮借〃紺轟負鍙ユ焺銆傚彞鏌勫叾瀹炲氨鏄笉閫忔槑鐨勬寚閽堟垨鏈夌潃鎸囬拡瀹藉害鐨勬暟鍊鹼紝搴旂敤紼嬪簭鐢ㄥ畠鏉ヨ〃紺哄唴閮ㄧ殑 OS 鏋勯犮?/p> <p>灝戞暟鎯呭喌涓嬶紝API 鍑芥暟涔熷皢涓嶉忔槑鎸囬拡瀹氫箟涓?PVOID 鎴?LPVOID 綾誨瀷銆傚湪 Windows API 鐨勫畾涔変腑錛岃繖浜涚被鍨嬫剰鎬濆氨鏄璇ユ寚閽堟病鏈夌被鍨嬨?/p> <p>褰撲竴涓笉閫忔槑鎸囬拡榪斿洖緇欐偍鐨勫簲鐢ㄧ▼搴忥紙鎴栬呮偍鐨勫簲鐢ㄧ▼搴忔湡鏈涘緱鍒頒竴涓笉閫忔槑鎸囬拡錛夋椂錛屾偍搴旇灝嗗弬鏁版垨榪斿洖鍊煎皝閫佷負 CLR 涓殑涓縐嶇壒孌婄被鍨?鈥? System.IntPtr銆傚綋鎮ㄤ嬌鐢?IntPtr 綾誨瀷鏃訛紝閫氬父涓嶄嬌鐢?out 鎴?ref 鍙傛暟錛屽洜涓?IntPtr 鎰忎負鐩存帴鎸佹湁鎸囬拡銆備笉榪囷紝濡傛灉鎮ㄥ皢涓涓寚閽堝皝閫佷負涓涓寚閽堬紝鍒欏 IntPtr 浣跨敤 by-ref 鍙傛暟鏄悎閫傜殑銆?/p> <p>鍦?CLR 綾誨瀷緋葷粺涓紝System.IntPtr 綾誨瀷鏈変竴涓壒孌婄殑灞炴с備笉鍍忕郴緇熶腑鐨勫叾浠栧熀綾誨瀷錛孖ntPtr 騫舵病鏈夊浐瀹氱殑澶у皬銆傜浉鍙嶏紝瀹冨湪榪愯鏃剁殑澶у皬鏄緷搴曞眰鎿嶄綔緋葷粺鐨勬甯告寚閽堝ぇ灝忚屽畾鐨勩傝繖鎰忓懗鐫鍦?32 浣嶇殑 Windows 涓紝IntPtr 鍙橀噺鐨勫搴︽槸 32 浣嶇殑錛岃屽湪 64 浣嶇殑 Windows 涓紝瀹炴椂緙栬瘧鍣ㄧ紪璇戠殑浠g爜浼氬皢 IntPtr 鍊肩湅浣?64 浣嶇殑鍊箋傚綋鍦ㄦ墭綆′唬鐮佸拰闈炴墭綆′唬鐮佷箣闂村皝閫佷笉閫忔槑鎸囬拡鏃訛紝榪欑鑷姩璋冭妭澶у皬鐨勭壒鐐瑰崄鍒嗘湁鐢ㄣ?/p> <p>璇瘋浣忥紝浠諱綍榪斿洖鎴栨帴鍙楀彞鏌勭殑 API 鍑芥暟鍏跺疄鎿嶄綔鐨勫氨鏄笉閫忔槑鎸囬拡銆傛偍鐨勪唬鐮佸簲璇ュ皢 Windows 涓殑鍙ユ焺灝侀佹垚 System.IntPtr 鍊箋?/p> <p>鎮ㄥ彲浠ュ湪鎵樼浠g爜涓皢 IntPtr 鍊煎己鍒惰漿鎹負 32 浣嶆垨 64 浣嶇殑鏁存暟鍊鹼紝鎴栧皢鍚庤呭己鍒惰漿鎹負鍓嶈呫傜劧鑰岋紝褰撲嬌鐢?Windows API 鍑芥暟鏃訛紝鍥犱負鎸囬拡搴旀槸涓嶉忔槑鐨勶紝鎵浠ラ櫎浜嗗瓨鍌ㄥ拰浼犻掔粰澶栭儴鏂規硶澶栵紝涓嶈兘灝嗗畠浠彟鍋氬畠鐢ㄣ傝繖縐?#8220;鍙檺瀛樺偍鍜屼紶閫?#8221;瑙勫垯鐨勪袱涓壒渚嬫槸褰撴偍闇瑕佸悜澶栭儴鏂規硶浼犻? null 鎸囬拡鍊煎拰闇瑕佹瘮杈?IntPtr 鍊間笌 null 鍊肩殑鎯呭喌銆備負浜嗗仛鍒拌繖涓鐐癸紝鎮ㄤ笉鑳藉皢闆跺己鍒惰漿鎹負 System.IntPtr錛岃屽簲璇ュ湪 IntPtr 綾誨瀷涓婁嬌鐢?Int32.Zero 闈欐佸叕鍏卞瓧孌碉紝浠ヤ究鑾峰緱鐢ㄤ簬姣旇緝鎴栬祴鍊肩殑 null 鍊箋?/p> <p>灝侀佹枃鏈?/p> <p>鍦ㄧ紪紼嬫椂緇忓父瑕佸鏂囨湰鏁版嵁榪涜澶勭悊銆傛枃鏈負 interop 鍒墮犱簡涓浜涢夯鐑︼紝榪欐湁涓や釜鍘熷洜銆傞鍏堬紝搴曞眰鎿嶄綔緋葷粺鍙兘浣跨敤 Unicode 鏉ヨ〃紺哄瓧絎︿覆錛屼篃鍙兘浣跨敤 ANSI銆傚湪鏋佸皯鏁版儏鍐典笅錛屼緥濡?MultiByteToWideChar API 鍑芥暟鐨勪袱涓弬鏁板湪瀛楃闆嗕笂鏄笉涓鑷寸殑銆?/p> <p>絎簩涓師鍥犳槸錛屽綋闇瑕佽繘琛?P/Invoke 鏃訛紝瑕佸鐞嗘枃鏈繕闇瑕佺壒鍒簡瑙e埌 C 鍜?CLR 澶勭悊鏂囨湰鐨勬柟寮忔槸涓嶅悓鐨勩傚湪 C 涓紝瀛楃涓插疄闄呬笂鍙槸涓涓瓧絎﹀兼暟緇勶紝閫氬父浠?null 浣滀負緇撴潫絎︺傚ぇ澶氭暟 Windows API 鍑芥暟鏄寜鐓т互涓嬫潯浠跺鐞嗗瓧絎︿覆鐨勶細瀵逛簬 ANSI錛屽皢鍏朵綔涓哄瓧絎﹀兼暟緇勶紱瀵逛簬 Unicode錛屽皢鍏朵綔涓哄瀛楃鍊兼暟緇勩?/p> <p>騫歌繍鐨勬槸錛孋LR 琚璁″緱鐩稿綋鐏墊椿錛屽綋灝侀佹枃鏈椂闂寰椾互杞繪澗瑙e喅錛岃屼笉鐢ㄥ湪鎰?Windows API 鍑芥暟鏈熸湜浠庢偍鐨勫簲鐢ㄧ▼搴忓緱鍒扮殑鏄粈涔堛傝繖閲屾槸涓浜涢渶瑕佽浣忕殑涓昏鑰冭檻浜嬮」錛?</p> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="listBullet" valign="top">•</td> <td class="listItem"> <p>鏄偍鐨勫簲鐢ㄧ▼搴忓悜 API 鍑芥暟浼犻掓枃鏈暟鎹紝榪樻槸 API 鍑芥暟鍚戞偍鐨勫簲鐢ㄧ▼搴忚繑鍥炲瓧絎︿覆鏁版嵁錛熸垨鑰呬簩鑰呭吋鏈夛紵 </p> </td> </tr> <tr> <td class="listBullet" valign="top">•</td> <td class="listItem"> <p>鎮ㄧ殑澶栭儴鏂規硶搴旇浣跨敤浠涔堟墭綆$被鍨嬶紵 </p> </td> </tr> <tr> <td class="listBullet" valign="top">•</td> <td class="listItem"> <p>API 鍑芥暟鏈熸湜寰楀埌鐨勬槸浠涔堟牸寮忕殑闈炴墭綆″瓧絎︿覆錛?/p> </td> </tr> </tbody> </table> <p>鎴戜滑棣栧厛瑙g瓟鏈鍚庝竴涓棶棰樸傚ぇ澶氭暟 Windows API 鍑芥暟閮藉甫鏈?LPTSTR 鎴?LPCTSTR 鍊箋傦紙浠庡嚱鏁拌搴︾湅錛夊畠浠垎鍒槸鍙慨鏀瑰拰涓嶅彲淇敼鐨勭紦鍐插尯錛屽寘鍚互 null 緇撴潫鐨勫瓧絎︽暟緇勩?#8220;C”浠h〃甯告暟錛屾剰鍛崇潃浣跨敤璇ュ弬鏁頒俊鎭笉浼氫紶閫掑埌鍑芥暟澶栭儴銆侺PTSTR 涓殑“T”琛ㄦ槑璇ュ弬鏁板彲浠ユ槸 Unicode 鎴? ANSI錛屽彇鍐充簬鎮ㄩ夋嫨鐨勫瓧絎﹂泦鍜屽簳灞傛搷浣滅郴緇熺殑瀛楃闆嗐傚洜涓哄湪 Windows API 涓ぇ澶氭暟瀛楃涓插弬鏁伴兘鏄繖涓ょ綾誨瀷涔嬩竴錛屾墍浠ュ彧瑕佸湪 DllImportAttribute 涓夋嫨 CharSet.Auto錛孋LR 灝辨寜榛樿鐨勬柟寮忓伐浣溿?</p> <p>鐒惰岋紝鏈変簺 API 鍑芥暟鎴栬嚜瀹氫箟鐨?DLL 鍑芥暟閲囩敤涓嶅悓鐨勬柟寮忚〃紺哄瓧絎︿覆銆傚鏋滄偍瑕佺敤鍒頒竴涓繖鏍風殑鍑芥暟錛屽氨鍙互閲囩敤 MarshalAsAttribute 淇グ澶栭儴鏂規硶鐨勫瓧絎︿覆鍙傛暟錛屽茍鎸囨槑涓縐嶄笉鍚屼簬榛樿 LPTSTR 鐨勫瓧絎︿覆鏍煎紡銆傛湁鍏? MarshalAsAttribute 鐨勬洿澶氫俊鎭紝璇峰弬闃呬綅浜?MarshalAsAttribute Class 鐨?Platform SDK 鏂囨。涓婚銆?/p> <p>鐜板湪璁╂垜浠湅涓涓嬪瓧絎︿覆淇℃伅鍦ㄦ偍鐨勪唬鐮佸拰闈炴墭綆″嚱鏁頒箣闂翠紶閫掔殑鏂瑰悜銆傛湁涓ょ鏂瑰紡鍙互鐭ラ亾澶勭悊瀛楃涓叉椂淇℃伅鐨勪紶閫掓柟鍚戙傜涓涓篃鏄渶鍙潬鐨勪竴涓柟娉曞氨 鏄鍏堢悊瑙e弬鏁扮殑鐢ㄩ斻備緥濡傦紝鎮ㄦ璋冪敤涓涓弬鏁幫紝瀹冪殑鍚嶇О綾諱技 CreateMutex 騫跺甫鏈変竴涓瓧絎︿覆錛屽垯鍙互鎯沖儚璇ュ瓧絎︿覆淇℃伅鏄粠搴旂敤紼嬪簭鍚? API 鍑芥暟浼犻掔殑銆傚悓鏃訛紝濡傛灉鎮ㄨ皟鐢?GetUserName錛屽垯璇ュ嚱鏁扮殑鍚嶇О琛ㄦ槑瀛楃涓蹭俊鎭槸浠庤鍑芥暟鍚戞偍鐨勫簲鐢ㄧ▼搴忎紶閫掔殑銆?/p> <p>闄や簡榪欑姣旇緝鍚堢悊鐨勬柟娉曞錛岀浜岀鏌ユ壘淇℃伅浼犻掓柟鍚戠殑鏂瑰紡灝辨槸鏌ユ壘 API 鍙傛暟綾誨瀷涓殑瀛楁瘝“C”銆備緥濡傦紝GetUserName API 鍑芥暟鐨勭涓涓弬鏁拌瀹氫箟涓?LPTSTR 綾誨瀷錛屽畠浠h〃涓涓寚鍚?Unicode 鎴?ANSI 瀛楃涓茬紦鍐插尯鐨勯暱鎸囬拡銆備絾鏄?CreateMutex 鐨勫悕縐板弬鏁拌綾誨瀷鍖栦負 LTCTSTR銆傝娉ㄦ剰錛岃繖閲岀殑綾誨瀷瀹氫箟鏄竴鏍風殑錛屼絾澧炲姞涓涓瓧姣?#8220;C”鏉ヨ〃鏄庣紦鍐插尯涓哄父鏁幫紝API 鍑芥暟涓嶈兘鍐欏叆銆?/p> <p>涓鏃︽槑紜簡鏂囨湰鍙傛暟鏄彧鐢ㄤ綔杈撳叆榪樻槸鐢ㄤ綔杈撳叆/杈撳嚭錛屽氨鍙互紜畾浣跨敤鍝 CLR 綾誨瀷浣滀負鍙傛暟綾誨瀷銆傝繖閲屾湁涓浜涜鍒欍傚鏋滃瓧絎︿覆鍙傛暟鍙敤浣滆緭鍏ワ紝鍒欎嬌鐢?System.String 綾誨瀷銆傚湪鎵樼浠g爜涓紝瀛楃涓叉槸涓嶅彉鐨勶紝閫傚悎鐢ㄤ簬涓嶄細琚湰鏈?API 鍑芥暟鏇存敼鐨勭紦鍐插尯銆?/p> <p>濡傛灉瀛楃涓插弬鏁板彲浠ョ敤浣滆緭鍏ュ拰/鎴栬緭鍑猴紝鍒欎嬌鐢?System.StringBuilder 綾誨瀷銆係tringBuilder 綾誨瀷鏄竴涓緢鏈夌敤鐨勭被搴撶被鍨嬶紝瀹冨彲浠ュ府鍔╂偍鏈夋晥鍦版瀯寤哄瓧絎︿覆錛屼篃姝eソ鍙互灝嗙紦鍐插尯浼犻掔粰鏈満鍑芥暟錛岀敱鏈満鍑芥暟涓烘偍濉厖瀛楃涓叉暟鎹備竴鏃﹀嚱鏁拌皟鐢ㄨ繑鍥烇紝鎮ㄥ彧 闇瑕佽皟鐢?StringBuilder 瀵硅薄鐨?ToString 灝卞彲浠ュ緱鍒頒竴涓?String 瀵硅薄銆?/p> <p>GetShortPathName API 鍑芥暟鑳藉緢濂藉湴鐢ㄤ簬鏄劇ず浠涔堟椂鍊欎嬌鐢?String銆佷粈涔堟椂鍊欎嬌鐢?StringBuilder錛屽洜涓哄畠鍙甫鏈変笁涓弬鏁幫細涓涓緭鍏ュ瓧絎︿覆銆佷竴涓緭鍑哄瓧絎︿覆鍜屼竴涓寚鏄庤緭鍑虹紦鍐插尯鐨勫瓧絎﹂暱搴︾殑鍙傛暟銆?/p> <p>鍥?3 鎵紺轟負鍔犳敞閲婄殑闈炴墭綆?GetShortPathName 鍑芥暟鏂囨。錛屽畠鍚屾椂鎸囧嚭浜嗚緭鍏ュ拰杈撳嚭瀛楃涓插弬鏁般傚畠寮曞嚭浜嗘墭綆$殑澶栭儴鏂規硶瀹氫箟錛屼篃濡傚浘 3 鎵紺恒傝娉ㄦ剰絎竴涓弬鏁拌灝侀佷負 System.String錛屽洜涓哄畠鏄竴涓彧鐢ㄤ綔杈撳叆鐨勫弬鏁般傜浜屼釜鍙傛暟浠h〃涓涓緭鍑虹紦鍐插尯錛屽畠浣跨敤浜?System.StringBuilder銆?/p> <p>灝忕粨</p> <p>鏈湀涓撴爮鎵浠嬬粛鐨?P/Invoke 鍔熻兘瓚沖璋冪敤 Windows 涓殑璁稿 API 鍑芥暟銆傜劧鑰岋紝濡傛灉鎮ㄥぇ閲忕敤鍒? interop錛屽垯浼氭渶緇堝彂鐜拌嚜宸卞皝閫佷簡寰堝鏉傜殑鏁版嵁緇撴瀯錛岀敋鑷沖彲鑳介渶瑕佸湪鎵樼浠g爜涓氳繃鎸囬拡鐩存帴璁塊棶鍐呭瓨銆傚疄闄呬笂錛屾湰鏈轟唬鐮佷腑鐨?interop 鍙互鏄竴涓皢緇嗚妭鍜屼綆綰ф瘮鐗硅棌鍦ㄩ噷闈㈢殑鐪熸鐨勬綐澶氭媺鐩掑瓙銆侰LR銆丆# 鍜屾墭綆?C++ 鎻愪緵浜嗚澶氭湁鐢ㄧ殑鍔熻兘錛涗篃璁鎬互鍚庢垜浼氬湪鏈笓鏍忎粙緇嶉珮綰х殑 P/Invoke 璇濋銆?/p> <p>鍚屾椂錛屽彧瑕佹偍瑙夊緱 .NET Framework 綾誨簱鏃犳硶鎾斁鎮ㄧ殑澹伴煶鎴栬呬負鎮ㄦ墽琛屽叾浠栦竴浜涘姛鑳斤紝鎮ㄥ彲浠ョ煡閬撳浣曞悜鍘熷鑰屼紭縐鐨?Windows API 瀵繪眰涓浜涘府鍔┿?/p> <p><span id="hvzpftn" class="clsFigs">Figure 1</span> <span id="hvzpftn" class="clsCap">MessageBeep, Interop Done Well</span><br></p> <pre class="clsCode">namespace Wintellect.Interop.Sound{<br><br> using System;<br><br> using System.Runtime.InteropServices;<br><br> using System.ComponentModel;<br><br><br><br> sealed class Sound{<br><br> public static void MessageBeep(BeepTypes type){<br><br> if(!MessageBeep((UInt32) type)){<br><br> Int32 err = Marshal.GetLastWin32Error();<br><br> throw new Win32Exception(err);<br><br> }<br><br> }<br><br><br><br> [DllImport("User32.dll", SetLastError=true)]<br><br> static extern Boolean MessageBeep(UInt32 beepType);<br><br><br><br> private Sound(){}<br><br> }<br><br><br><br> enum BeepTypes{ <br><br> Simple = -1,<br><br> Ok = 0x00000000,<br><br> IconHand = 0x00000010,<br><br> IconQuestion = 0x00000020,<br><br> IconExclamation = 0x00000030,<br><br> IconAsterisk = 0x00000040<br><br> }<br><br>}<br><br></pre> <pre class="clsCode"><span id="hvzpftn" class="clsFigs">Figure 2</span> <span id="hvzpftn" class="clsCap">Non-Pointer Data Types</span><br><br></pre> <pre class="clsCode"> <table border="1" cellpadding="3" cellspacing="0" width="400"> <thead> <tr valign="top"> <th>Win32 Types</th><th>Specification</th><th>CLR Type</th> </tr> </thead> <tbody> <tr valign="top"> <td>char, INT8, SBYTE, CHARâ鈧?nbsp;</td> <td>8-bit signed integer</td> <td>System.SByte</td> </tr> <tr valign="top"> <td>short, short int, INT16, SHORT</td> <td>16-bit signed integer</td> <td>System.Int16</td> </tr> <tr valign="top"> <td>int, long, long int, INT32, LONG32, BOOLâ鈧?nbsp;, INT </td> <td>32-bit signed integer</td> <td>System.Int32</td> </tr> <tr valign="top"> <td>__int64, INT64, LONGLONG</td> <td>64-bit signed integer</td> <td>System.Int64</td> </tr> <tr valign="top"> <td>unsigned char, UINT8, UCHARâ鈧?nbsp;, BYTE</td> <td>8-bit unsigned integer</td> <td>System.Byte</td> </tr> <tr valign="top"> <td>unsigned short, UINT16, USHORT, WORD, ATOM, WCHARâ鈧?nbsp;, __wchar_t</td> <td>16-bit unsigned integer</td> <td>System.UInt16</td> </tr> <tr valign="top"> <td>unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT</td> <td>32-bit unsigned integer</td> <td>System.UInt32</td> </tr> <tr valign="top"> <td>unsigned __int64, UINT64, DWORDLONG, ULONGLONG</td> <td>64-bit unsigned integer</td> <td>System.UInt64</td> </tr> <tr valign="top"> <td>float, FLOAT</td> <td>Single-precision floating point</td> <td>System.Single</td> </tr> <tr valign="top"> <td>double, long double, DOUBLE</td> <td>Double-precision floating point</td> <td>System.Double</td> </tr> <tr valign="top"> <td colspan="3">â鈧?nbsp;In Win32 this type is an integer with a specially assigned meaning; in contrast, the CLR provides a specific type devoted to this meaning.</td> </tr> </tbody> </table> </pre> <pre class="clsCode"><hr></pre> <pre class="clsCode"><span id="hvzpftn" class="clsFigs"></span></pre> <pre class="clsCode"><span id="hvzpftn" class="clsFigs">Figure 3</span> <span id="hvzpftn" class="clsCap">GetShortPathName Declarations</span><br></pre> <pre class="clsCode">// ** Documentation for Win32 GetShortPathName() API Function<br><br>// DWORD GetShortPathName(<br><br>// LPCTSTR lpszLongPath, // file for which to get short path <br><br>// LPTSTR lpszShortPath, // short path name (output)<br><br>// DWORD cchBuffer // size of output buffer<br><br>// );<br><br><br><br>[DllImport("Kernel32", CharSet = CharSet.Auto)]<br><br>static extern Int32 GetShortPathName(<br><br> String path, // input string<br><br> StringBuilder shortPath, // output string<br><br> Int32 shortPathLength); // StringBuilder.Capacity<br></pre><img src ="http://www.shnenglu.com/netboy/aggbug/73850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/netboy/" target="_blank">鐜嬪媷鑹?/a> 2009-02-15 10:50 <a href="http://www.shnenglu.com/netboy/archive/2009/02/15/73850.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍑芥暟璋冪敤綰﹀畾鍜屽爢鏍?錛堣漿錛?/title><link>http://www.shnenglu.com/netboy/archive/2009/02/15/73849.html</link><dc:creator>鐜嬪媷鑹?/dc:creator><author>鐜嬪媷鑹?/author><pubDate>Sun, 15 Feb 2009 02:43:00 GMT</pubDate><guid>http://www.shnenglu.com/netboy/archive/2009/02/15/73849.html</guid><wfw:comment>http://www.shnenglu.com/netboy/comments/73849.html</wfw:comment><comments>http://www.shnenglu.com/netboy/archive/2009/02/15/73849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/netboy/comments/commentRss/73849.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/netboy/services/trackbacks/73849.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset="utf-8""> <meta name="ProgId" content="Word.Document"> <meta name="Generator" content="Microsoft Word 11"> <meta name="Originator" content="Microsoft Word 11"> <link rel="File-List" href="file:///C:%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="chmetcnv"></o:smarttagtype><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:view> <w:zoom>0</w:zoom> <w:punctuationkerning/> <w:drawinggridverticalspacing>7.8 紓?/w:drawinggridverticalspacing> <w:displayhorizontaldrawinggridevery>0</w:displayhorizontaldrawinggridevery> <w:displayverticaldrawinggridevery>2</w:displayverticaldrawinggridevery> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:saveifxmlinvalid> <w:ignoremixedcontent>false</w:ignoremixedcontent> <w:alwaysshowplaceholdertext>false</w:alwaysshowplaceholdertext> <w:compatibility> <w:spaceforul/> <w:balancesinglebytedoublebytewidth/> <w:donotleavebackslashalone/> <w:ultrailspace/> <w:donotexpandshiftreturn/> <w:adjustlineheightintable/> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> <w:usefelayout/> </w:compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:browserlevel> </w:worddocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:latentstyles> </xml><![endif]--><!--[if !mso]><object classid="clsid:38481807-ca0e-42d2-bf39-b33af135cc4d" id="ieooui"></object> <style> st1\:*{behavior:url(#ieooui) } </style> <![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:瀹嬩綋; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@瀹嬩綋"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:瀹嬩綋; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:鏅氳〃鏍? mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">  <span>  </span></span><span style="font-size: 12pt; font-family: 瀹嬩綋;">浣跨敤<span lang="EN-US">C/C++</span>璇█寮鍙戣蔣浠剁殑紼嬪簭鍛樼粡甯哥鍒拌繖鏍風殑闂錛氭湁鏃跺欐槸紼嬪簭緙栬瘧娌℃湁闂錛屼絾鏄摼鎺ョ殑鏃跺欐繪槸鎶ュ憡鍑芥暟涓嶅瓨鍦紙緇忓吀鐨?span lang="EN-US">LNK 2001</span>閿欒錛夛紝鏈夋椂鍊欐槸紼嬪簭緙栬瘧鍜岄摼鎺ラ兘娌℃湁閿欒錛屼絾鏄彧瑕佽皟鐢ㄥ簱涓殑鍑芥暟灝變細鍑虹幇鍫嗘爤寮傚父銆傝繖浜涚幇璞¢氬父鏄嚭鐜板湪<span lang="EN-US">C</span>鍜?span lang="EN-US">C++</span>鐨勪唬鐮佹販鍚堜嬌鐢ㄧ殑鎯呭喌涓嬫垨 鍦?span lang="EN-US">C++</span>紼嬪簭涓嬌鐢ㄧ涓夋柟鐨勫簱鐨勬儏鍐典笅錛堜笉鏄敤<span lang="EN-US">C++</span>璇█寮鍙戠殑錛夛紝鍏跺疄榪欓兘鏄嚱鏁拌皟鐢ㄧ害瀹氾紙<span lang="EN-US">Calling Convention</span>錛夊拰鍑芥暟鍚嶄慨楗幫紙<span lang="EN-US">Decorated Name</span>錛夎鍒欐児鐨勭ジ銆傚嚱鏁拌皟鐢ㄦ柟寮忓喅瀹氫簡鍑芥暟鍙傛暟鍏ユ爤鐨勯『搴忥紝鏄敱璋冪敤鑰呭嚱鏁拌繕鏄璋冪敤鍑芥暟璐熻矗娓呴櫎鏍堜腑鐨勫弬鏁扮瓑闂錛岃屽嚱鏁板悕淇グ瑙勫垯鍐沖畾浜嗙紪璇戝櫒浣? 鐢ㄤ綍縐嶅悕瀛椾慨楗版柟寮忔潵鍖哄垎涓嶅悓鐨勫嚱鏁幫紝濡傛灉鍑芥暟涔嬮棿鐨勮皟鐢ㄧ害瀹氫笉鍖歸厤鎴栬呭悕瀛椾慨楗頒笉鍖歸厤灝變細浜х敓浠ヤ笂鐨勯棶棰樸傛湰鏂囧垎鍒<span lang="EN-US">C</span>鍜?span lang="EN-US">C++</span>榪欎袱縐嶇紪紼嬭璦鐨勫嚱鏁拌皟 鐢ㄧ害瀹氬拰鍑芥暟鍚嶄慨楗拌鍒欒繘琛岃緇嗙殑瑙i噴錛屾瘮杈冧簡瀹冧滑鐨勫紓鍚屼箣澶勶紝騫朵婦渚嬭鏄庝簡浠ヤ笂闂鍑虹幇鐨勫師鍥犮? <span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍑芥暟璋冪敤綰﹀畾錛?span lang="EN-US">Calling Convention</span>錛?/span></strong><strong><span style="font-size: 13.5pt; font-family: 瀹嬩綋;" lang="EN-US"><o:p></o:p></span></strong></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍑芥暟璋冪敤綰﹀畾涓嶄粎鍐沖畾浜嗗彂鐢熷嚱鏁拌皟鐢ㄦ椂鍑芥暟鍙傛暟鐨勫叆鏍堥『搴忥紝榪樺喅瀹氫簡鏄敱璋冪敤鑰呭嚱鏁拌繕鏄璋冪敤鍑芥暟璐熻矗娓呴櫎鏍堜腑鐨勫弬鏁幫紝榪樺師鍫嗘爤銆傚嚱鏁拌皟鐢ㄧ害瀹氭湁寰堝鏂? 寮忥紝闄や簡甯歌鐨?span lang="EN-US">__cdecl</span>錛?span lang="EN-US">__fastcall</span>鍜?span lang="EN-US">__stdcall</span>涔嬪錛?span lang="EN-US">C++</span>鐨勭紪璇戝櫒榪樻敮鎸?span lang="EN-US">thiscall</span>鏂瑰紡錛屼笉灝?span lang="EN-US">C/C++</span>緙栬瘧鍣ㄨ繕鏀寔<span lang="EN-US"> naked call</span>鏂瑰紡銆傝繖涔堝鍑芥暟璋冪敤綰﹀畾甯稿父浠よ澶氱▼搴忓憳寰堣糠鎯戯紝鍒板簳瀹冧滑鏄庝箞鍥炰簨錛岄兘鏄湪浠涔堟儏鍐典笅浣跨敤鍛紵涓嬮潰灝卞垎鍒粙緇嶈繖鍑犵鍑芥暟璋冪敤綰﹀畾銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"><br> 1.__cdecl<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">緙栬瘧鍣ㄧ殑鍛戒護琛屽弬鏁版槸<span lang="EN-US">/Gd</span>銆?span lang="EN-US">__cdecl</span>鏂瑰紡鏄?span lang="EN-US">C/C++</span>緙栬瘧鍣ㄩ粯璁ょ殑鍑芥暟璋冪敤綰﹀畾錛屾墍鏈夐潪<span lang="EN-US">C++</span>鎴愬憳鍑芥暟鍜岄偅浜涙病鏈夌敤<span lang="EN-US">__stdcall</span>鎴?span lang="EN-US"> __fastcall</span>澹版槑鐨勫嚱鏁伴兘榛樿鏄?span lang="EN-US">__cdecl</span>鏂瑰紡錛屽畠浣跨敤<span lang="EN-US">C</span>鍑芥暟璋冪敤鏂瑰紡錛屽嚱鏁板弬鏁版寜鐓т粠鍙沖悜宸︾殑欏哄簭鍏ユ爤錛屽嚱鏁拌皟鐢ㄨ呰礋璐f竻闄ゆ爤涓殑鍙傛暟錛岀敱 浜庢瘡嬈″嚱鏁拌皟鐢ㄩ兘瑕佺敱緙栬瘧鍣ㄤ駭鐢熸竻闄わ紙榪樺師錛夊爢鏍堢殑浠g爜錛屾墍浠ヤ嬌鐢?span lang="EN-US">__cdecl</span>鏂瑰紡緙栬瘧鐨勭▼搴忔瘮浣跨敤<span lang="EN-US">__stdcall</span>鏂瑰紡緙栬瘧鐨勭▼搴忚澶у緢澶氾紝浣嗘槸<span lang="EN-US"> __cdecl</span>璋冪敤鏂瑰紡鏄敱鍑芥暟璋冪敤鑰呰礋璐f竻闄ゆ爤涓殑鍑芥暟鍙傛暟錛屾墍浠ヨ繖縐嶆柟寮忔敮鎸佸彲鍙樺弬鏁幫紝姣斿<span lang="EN-US">printf</span>鍜?span lang="EN-US">windows</span>鐨?span lang="EN-US">API wsprintf</span>灝辨槸<span lang="EN-US">__cdecl</span>璋冪敤鏂瑰紡銆傚浜?span lang="EN-US">C</span>鍑芥暟錛?span lang="EN-US">__cdecl</span>鏂瑰紡鐨勫悕瀛椾慨楗扮害瀹氭槸鍦ㄥ嚱鏁板悕縐板墠娣誨姞涓涓笅鍒掔嚎錛涘浜?span lang="EN-US">C++</span>鍑芥暟錛岄櫎闈炵壒鍒嬌 鐢?span lang="EN-US">extern "C"</span>錛?span lang="EN-US">C++</span>鍑芥暟浣跨敤涓嶅悓鐨勫悕瀛椾慨楗版柟寮忋?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"><br> 2.__fastcall<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">緙栬瘧鍣ㄧ殑鍛戒護琛屽弬鏁版槸<span lang="EN-US">/Gr</span>銆?span lang="EN-US">__fastcall</span>鍑芥暟璋冪敤綰﹀畾鍦ㄥ彲鑳界殑鎯呭喌涓嬩嬌鐢ㄥ瘎瀛樺櫒浼犻掑弬鏁幫紝閫氬父鏄墠涓や釜<span lang="EN-US"> DWORD</span>綾誨瀷鐨勫弬鏁版垨杈冨皬鐨勫弬鏁頒嬌鐢?span lang="EN-US">ECX</span>鍜?span lang="EN-US">EDX</span>瀵勫瓨鍣ㄤ紶閫掞紝鍏朵綑鍙傛暟鎸夌収浠庡彸鍚戝乏鐨勯『搴忓叆鏍堬紝琚皟鐢ㄥ嚱鏁板湪榪斿洖涔嬪墠璐熻矗娓呴櫎鏍堜腑鐨勫弬鏁般傜紪璇戝櫒浣跨敤 涓や釜<span lang="EN-US">@</span>淇グ鍑芥暟鍚嶅瓧錛屽悗璺熷崄榪涘埗鏁拌〃紺虹殑鍑芥暟鍙傛暟鍒楄〃澶у皬錛屼緥濡傦細<span lang="EN-US">@function_name@number</span>銆傞渶瑕佹敞鎰忕殑鏄?span lang="EN-US">__fastcall</span>鍑芥暟璋?鐢ㄧ害瀹氬湪涓嶅悓鐨勭紪璇戝櫒涓婂彲鑳芥湁涓嶅悓鐨勫疄鐜幫紝姣斿<span lang="EN-US">16</span>浣嶇殑緙栬瘧鍣ㄥ拰<span lang="EN-US">32</span>浣嶇殑緙栬瘧鍣紝鍙﹀錛屽湪浣跨敤鍐呭祵姹囩紪浠g爜鏃訛紝榪樿娉ㄦ剰涓嶈兘鍜岀紪璇戝櫒浣跨敤鐨勫瘎瀛樺櫒鏈夊啿紿併?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"><br> 3.__stdcall<br>  <br>     </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">緙栬瘧鍣ㄧ殑鍛戒護琛屽弬鏁版槸<span lang="EN-US">/Gz</span>錛?span lang="EN-US">__stdcall</span>鏄?span lang="EN-US">Pascal</span>紼嬪簭鐨勭己鐪佽皟鐢ㄦ柟寮忥紝澶у鏁?span lang="EN-US">Windows</span>鐨?span lang="EN-US">API</span>涔熸槸<span lang="EN-US">__stdcall</span>璋冪敤綰﹀畾銆?span lang="EN-US"> __stdcall</span>鍑芥暟璋冪敤綰﹀畾灝嗗嚱鏁板弬鏁頒粠鍙沖悜宸﹀叆鏍堬紝闄ら潪浣跨敤鎸囬拡鎴栧紩鐢ㄧ被鍨嬬殑鍙傛暟錛屾墍鏈夊弬鏁伴噰鐢ㄤ紶鍊兼柟寮忎紶閫掞紝鐢辮璋冪敤鍑芥暟璐熻矗娓呴櫎鏍堜腑鐨勫弬鏁般傚 浜?span lang="EN-US">C</span>鍑芥暟錛?span lang="EN-US">__stdcall</span>鐨勫悕縐頒慨楗版柟寮忔槸鍦ㄥ嚱鏁板悕瀛楀墠娣誨姞涓嬪垝綰匡紝鍦ㄥ嚱鏁板悕瀛楀悗娣誨姞<span lang="EN-US">@</span>鍜屽嚱鏁板弬鏁扮殑澶у皬錛屼緥濡傦細<span lang="EN-US"><a href="mailto:_functionname@number">_functionname@number</a><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">4.thiscall<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    thiscall</span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍙敤鍦?span lang="EN-US">C++</span>鎴愬憳鍑芥暟鐨勮皟鐢紝鍑芥暟鍙傛暟鎸夌収浠庡彸鍚戝乏鐨勯『搴忓叆鏍堬紝綾誨疄渚嬬殑<span lang="EN-US">this</span>鎸囬拡閫氳繃<span lang="EN-US">ECX</span>瀵勫瓨鍣ㄤ紶閫掋傞渶瑕佹敞鎰忕殑鏄?span lang="EN-US">thiscall</span>涓嶆槸<span lang="EN-US">C++</span>鐨勫叧閿瓧錛屼笉鑳戒嬌鐢?span lang="EN-US">thiscall</span>澹版槑鍑芥暟錛屽畠鍙兘鐢辯紪璇戝櫒浣跨敤銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">5.naked call<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">閲囩敤鍓嶉潰鍑犵鍑芥暟璋冪敤綰﹀畾鐨勫嚱鏁幫紝緙栬瘧鍣ㄤ細鍦ㄥ繀瑕佺殑鏃跺欒嚜鍔ㄥ湪鍑芥暟寮濮嬫坊鍔犱繚瀛?span lang="EN-US">ESI</span>錛?span lang="EN-US">EDI</span>錛?span lang="EN-US">EBX</span>錛?span lang="EN-US">EBP</span>瀵勫瓨鍣ㄧ殑浠g爜錛屽湪閫鍑哄嚱鏁版椂鎭㈠榪欎簺瀵勫瓨鍣?鐨勫唴瀹癸紝浣跨敤<span lang="EN-US">naked call</span>鏂瑰紡澹版槑鐨勫嚱鏁頒笉浼氭坊鍔犺繖鏍風殑浠g爜錛岃繖涔熷氨鏄負浠涔堢О鍏朵負<span lang="EN-US">naked</span>鐨勫師鍥犲惂銆?span lang="EN-US">naked  call</span>涓嶆槸綾誨瀷淇グ絎︼紝鏁呭繀欏誨拰<span lang="EN-US">_declspec</span>鍏卞悓浣跨敤銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    VC</span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鐨勭紪璇戠幆澧冮粯璁ゆ槸浣跨敤<span lang="EN-US">__cdecl</span>璋冪敤綰﹀畾錛屼篃鍙互鍦ㄧ紪璇戠幆澧冪殑<span lang="EN-US">Project Setting...</span>鑿滃崟錛嶃?span lang="EN-US">C/C++ </span>錛濄?span lang="EN-US">Code  Generation</span>欏歸夋嫨璁劇疆鍑芥暟璋冪敤綰﹀畾銆備篃鍙互鐩存帴鍦ㄥ嚱鏁板0鏄庡墠娣誨姞鍏抽敭瀛?span lang="EN-US">__stdcall</span>銆?span lang="EN-US">__cdecl</span>鎴?span lang="EN-US">__fastcall</span>絳夊崟鐙‘瀹氬嚱 鏁扮殑璋冪敤鏂瑰紡銆傚湪<span lang="EN-US">Windows</span>緋葷粺涓婂紑鍙戣蔣浠跺父鐢ㄥ埌<span lang="EN-US">WINAPI</span>瀹忥紝瀹冨彲浠ユ牴鎹紪璇戣緗炕璇戞垚閫傚綋鐨勫嚱鏁拌皟鐢ㄧ害瀹氾紝鍦?span lang="EN-US">WIN32</span>涓紝瀹冭瀹氫箟涓?span lang="EN-US"> __stdcall</span>銆?span lang="EN-US"> <o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"> <o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 13.5pt; font-family: 瀹嬩綋;">鍑芥暟鍚嶅瓧淇グ錛?span lang="EN-US">Decorated Name</span>錛夋柟寮?/span><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"><o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍑芥暟鐨勫悕瀛椾慨楗幫紙<span lang="EN-US">Decorated Name</span>錛夊氨鏄紪璇戝櫒鍦ㄧ紪璇戞湡闂村垱寤虹殑涓涓瓧絎︿覆錛岀敤鏉ユ寚鏄庡嚱鏁扮殑瀹氫箟鎴栧師鍨嬨?span lang="EN-US">LINK</span>紼嬪簭鎴栧叾浠栧伐鍏鋒湁鏃墮渶瑕佹寚瀹氬嚱鏁扮殑鍚嶅瓧淇グ鏉ュ畾浣嶅嚱鏁扮殑姝g‘浣嶇疆銆? 澶氭暟鎯呭喌涓嬬▼搴忓憳騫朵笉闇瑕佺煡閬撳嚱鏁扮殑鍚嶅瓧淇グ錛?span lang="EN-US">LINK</span>紼嬪簭鎴栧叾浠栧伐鍏蜂細鑷姩鍖哄垎浠栦滑銆傚綋鐒訛紝鍦ㄦ煇浜涙儏鍐典笅闇瑕佹寚瀹氬嚱鏁扮殑鍚嶅瓧淇グ錛屼緥濡傚湪<span lang="EN-US">C++</span>紼嬪簭涓紝 涓轟簡璁?span lang="EN-US">LINK</span>紼嬪簭鎴栧叾浠栧伐鍏瘋兘澶熷尮閰嶅埌姝g‘鐨勫嚱鏁板悕瀛楋紝灝卞繀欏諱負閲嶈澆鍑芥暟鍜屼竴浜涚壒孌婄殑鍑芥暟錛堝鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟錛夋寚瀹氬悕瀛楄楗般傚彟涓縐嶉渶瑕佹寚瀹氬嚱鏁扮殑 鍚嶅瓧淇グ鐨勬儏鍐墊槸鍦ㄦ眹緙栫▼搴忎腑璋冪敤<span lang="EN-US">C</span>鎴?span lang="EN-US">C++</span>鐨勫嚱鏁般傚鏋滃嚱鏁板悕瀛楋紝璋冪敤綰﹀畾錛岃繑鍥炲肩被鍨嬫垨鍑芥暟鍙傛暟鏈変換浣曟敼鍙橈紝鍘熸潵鐨勫悕瀛椾慨楗板氨涓嶅啀鏈夋晥錛屽繀欏繪寚瀹氭柊鐨? 鍚嶅瓧淇グ銆?span lang="EN-US">C</span>鍜?span lang="EN-US">C++</span>紼嬪簭鐨勫嚱鏁板湪鍐呴儴浣跨敤涓嶅悓鐨勫悕瀛椾慨楗版柟寮忥紝涓嬮潰灝嗗垎鍒粙緇嶈繖涓ょ鏂瑰紡銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">1. C</span><span style="font-size: 12pt; font-family: 瀹嬩綋;">緙栬瘧鍣ㄧ殑鍑芥暟鍚嶄慨楗拌鍒?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">瀵逛簬<span lang="EN-US">__stdcall</span>璋冪敤綰﹀畾錛岀紪璇戝櫒鍜岄摼鎺ュ櫒浼氬湪杈撳嚭鍑芥暟鍚嶅墠鍔犱笂涓涓笅鍒掔嚎鍓嶇紑錛屽嚱鏁板悕鍚庨潰鍔犱笂涓涓?span lang="EN-US">“@”</span>絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屼緥濡?span lang="EN-US"><a href="mailto:_functionname@number">_functionname@number</a></span>銆?span lang="EN-US">__cdecl</span>璋冪敤綰﹀畾浠呭湪杈撳嚭鍑芥暟鍚嶅墠鍔犱笂涓涓笅鍒掔嚎鍓嶇紑錛屼緥濡?span lang="EN-US">_functionname</span>銆?span lang="EN-US">__fastcall</span>璋冪敤綰﹀畾鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞涓婁竴涓?span lang="EN-US">“@”</span>絎﹀彿錛屽悗闈篃鏄竴涓?span lang="EN-US">“@”</span>絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屼緥濡?span lang="EN-US">@functionname@number</span>銆?span lang="EN-US">    <br>  <br> 2. C++</span>緙栬瘧鍣ㄧ殑鍑芥暟鍚嶄慨楗拌鍒?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    C++</span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鐨勫嚱鏁板悕淇グ瑙勫垯鏈変簺澶嶆潅錛屼絾鏄俊鎭洿鍏呭垎錛岄氳繃鍒嗘瀽淇グ鍚嶄笉浠呰兘澶熺煡閬撳嚱鏁扮殑璋冪敤鏂瑰紡錛岃繑鍥炲肩被鍨嬶紝鍙傛暟涓暟鐢氳嚦鍙傛暟綾誨瀷銆備笉綆?span lang="EN-US"> __cdecl</span>錛?span lang="EN-US">__fastcall</span>榪樻槸<span lang="EN-US">__stdcall</span>璋冪敤鏂瑰紡錛屽嚱鏁頒慨楗伴兘鏄互涓涓?span lang="EN-US">“?”</span>寮濮嬶紝鍚庨潰绱ц窡鍑芥暟鐨勫悕瀛楋紝鍐嶅悗闈㈡槸鍙傛暟琛ㄧ殑寮濮嬫爣璇嗗拰 鎸夌収鍙傛暟綾誨瀷浠e彿鎷煎嚭鐨勫弬鏁拌〃銆傚浜?span lang="EN-US">__stdcall</span>鏂瑰紡錛屽弬鏁拌〃鐨勫紑濮嬫爣璇嗘槸<span lang="EN-US"><a href="mailto:%E2%80%9C@@YG">“@@YG</a>”</span>錛屽浜?span lang="EN-US">__cdecl</span>鏂瑰紡鍒欐槸<span lang="EN-US"><a href="mailto:%E2%80%9C@@YA">“@@YA</a>”</span>錛屽浜?span lang="EN-US">__fastcall</span>鏂瑰紡鍒欐槸<span lang="EN-US"><a href="mailto:%E2%80%9C@@YI">“@@YI</a>”</span>銆傚弬鏁拌〃鐨勬嫾鍐欎唬鍙峰涓嬫墍紺猴細<span lang="EN-US"><br> X--void    <br> D--char    <br> E--unsigned char    <br> F--short    <br> H--int    <br> I--unsigned int    <br> J--long    <br> K--unsigned long</span>錛?span lang="EN-US">DWORD</span>錛?span lang="EN-US"> <br> M--float    <br> N--double    <br> _N--bool<br> U--struct<br> ....<br> </span>鎸?閽堢殑鏂瑰紡鏈変簺鐗瑰埆錛岀敤<span lang="EN-US">PA</span>琛ㄧず鎸囬拡錛岀敤<span lang="EN-US">PB</span>琛ㄧず<span lang="EN-US">const</span>綾誨瀷鐨勬寚閽堛傚悗闈㈢殑浠e彿琛ㄦ槑鎸囬拡綾誨瀷錛屽鏋滅浉鍚岀被鍨嬬殑鎸囬拡榪炵畫鍑虹幇錛屼互<span lang="EN-US">“<st1:chmetcnv unitname="”" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">0”</st1:chmetcnv></span>浠f浛錛屼竴涓?span lang="EN-US">“<st1:chmetcnv unitname="”" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">0”</st1:chmetcnv></span>浠?琛ㄤ竴嬈¢噸澶嶃?span lang="EN-US">U</span>琛ㄧず緇撴瀯綾誨瀷錛岄氬父鍚庤窡緇撴瀯浣撶殑綾誨瀷鍚嶏紝鐢?span lang="EN-US">“@@”</span>琛ㄧず緇撴瀯綾誨瀷鍚嶇殑緇撴潫銆傚嚱鏁扮殑榪斿洖鍊間笉浣滅壒孌婂鐞嗭紝瀹冪殑鎻忚堪鏂瑰紡鍜屽嚱鏁板弬鏁頒竴鏍鳳紝绱ц窡鐫 鍙傛暟琛ㄧ殑寮濮嬫爣蹇楋紝涔熷氨鏄錛屽嚱鏁板弬鏁拌〃鐨勭涓欏瑰疄闄呬笂鏄〃紺哄嚱鏁扮殑榪斿洖鍊肩被鍨嬨傚弬鏁拌〃鍚庝互<span lang="EN-US"><a href="mailto:%E2%80%9C@Z">“@Z</a>”</span>鏍囪瘑鏁翠釜鍚嶅瓧鐨勭粨鏉燂紝濡傛灉璇ュ嚱鏁版棤鍙傛暟錛屽垯浠?span lang="EN-US">“Z”</span>鏍囪瘑緇撴潫銆備笅闈婦涓や釜渚嬪瓙錛屽亣濡傛湁浠ヤ笅鍑芥暟澹版槑錛?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">int Function1(char *var1,unsigned long);<br> <!--[if !supportLineBreakNewLine]--><br> <!--[endif]--><o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍏跺嚱鏁頒慨楗板悕涓?span lang="EN-US"><a href="mailto:%E2%80%9C?Function1@@YGHPADK@Z">“?Function1@@YGHPADK@Z</a>”</span>錛岃屽浜庡嚱鏁板0鏄庯細<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">void Function2();<br> <!--[if !supportLineBreakNewLine]--><br> <!--[endif]--><o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍏跺嚱鏁頒慨楗板悕鍒欎負<span lang="EN-US"><a href="mailto:%E2%80%9C?Function2@@YGXXZ">“?Function2@@YGXXZ</a>” </span>銆? <span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"> <o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">瀵逛簬<span lang="EN-US">C++</span>鐨勭被鎴愬憳鍑芥暟錛堝叾璋冪敤鏂瑰紡鏄?span lang="EN-US">thiscall</span>錛夛紝鍑芥暟鐨勫悕瀛椾慨楗頒笌闈炴垚鍛樼殑<span lang="EN-US">C++</span>鍑芥暟紼嶆湁涓嶅悓錛岄鍏堝氨鏄湪鍑芥暟鍚嶅瓧鍜屽弬鏁拌〃涔嬮棿鎻掑叆浠?span lang="EN-US">“@”</span>瀛楃寮曞鐨勭被鍚嶏紱鍏舵鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗕笉鍚岋紝鍏湁錛?span lang="EN-US">public</span>錛夋垚鍛樺嚱鏁扮殑鏍囪瘑鏄?span lang="EN-US"><a href="mailto:%E2%80%9C@@QAE">“@@QAE</a>”,</span>淇濇姢錛?span lang="EN-US">protected</span>錛夋垚鍛樺嚱鏁扮殑鏍囪瘑鏄?span lang="EN-US"><a href="mailto:%E2%80%9C@@IAE">“@@IAE</a>”,</span>縐佹湁錛?span lang="EN-US">private</span>錛夋垚鍛樺嚱鏁扮殑鏍囪瘑鏄?span lang="EN-US"><a href="mailto:%E2%80%9C@@AAE">“@@AAE</a>”</span>錛屽鏋滃嚱鏁板0鏄庝嬌鐢ㄤ簡<span lang="EN-US">const</span>鍏抽敭瀛楋紝鍒欑浉搴旂殑鏍囪瘑搴斿垎鍒負<span lang="EN-US"><a href="mailto:%E2%80%9C@@QBE">“@@QBE</a>”</span>錛?span lang="EN-US"><a href="mailto:%E2%80%9C@@IBE">“@@IBE</a>”</span>鍜?span lang="EN-US"><a href="mailto:%E2%80%9C@@ABE">“@@ABE</a>”</span>銆傚鏋滃弬鏁扮被鍨嬫槸綾誨疄渚嬬殑寮曠敤錛屽垯浣跨敤<span lang="EN-US">“AAV<st1:chmetcnv unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">1”</st1:chmetcnv></span>錛屽浜?span lang="EN-US">const</span>綾誨瀷鐨勫紩鐢紝鍒欎嬌鐢?span lang="EN-US">“ABV<st1:chmetcnv unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">1”</st1:chmetcnv></span>銆備笅闈㈠氨浠ョ被<span lang="EN-US">CTest</span>涓轟緥璇存槑<span lang="EN-US">C++</span>鎴愬憳鍑芥暟鐨勫悕瀛椾慨楗拌鍒欙細<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">class CTest<br> {<br> ......<br> private:<br>     void Function(int);<br> protected:<br>     void CopyInfo(const CTest &src);<br> public:<br>     long DrawText(HDC hdc, long pos, const TCHAR* text, RGBQUAD color, BYTE bUnder, bool bSet);<br>     long InsightClass(DWORD dwClass) const;<br> ......<br> };<br> <!--[if !supportLineBreakNewLine]--><br> <!--[endif]--><o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;">瀵逛簬鎴愬憳鍑芥暟<span lang="EN-US">Function</span>錛屽叾鍑芥暟淇グ鍚嶄負<span lang="EN-US"><a href="mailto:%E2%80%9C?Function@CTest@@AAEXH@Z">“?Function@CTest@@AAEXH@Z</a>”</span>錛屽瓧絎︿覆<span lang="EN-US"><a href="mailto:%E2%80%9C@@AAE">“@@AAE</a>”</span>琛ㄧず榪欐槸涓涓鏈夊嚱鏁般傛垚鍛樺嚱鏁?span lang="EN-US">CopyInfo</span>鍙湁涓涓弬鏁幫紝鏄綾?span lang="EN-US">CTest</span>鐨?span lang="EN-US">const</span>寮曠敤鍙傛暟錛屽叾鍑芥暟淇グ鍚嶄負<span lang="EN-US"><a href="mailto:%E2%80%9C?CopyInfo@CTest@@IAEXABV1@@Z">“?CopyInfo@CTest@@IAEXABV1@@Z</a>”</span>銆?span lang="EN-US"> DrawText</span>鏄竴涓瘮杈冨鏉傜殑鍑芥暟澹版槑錛屼笉浠呮湁瀛楃涓插弬鏁幫紝榪樻湁緇撴瀯浣撳弬鏁板拰<span lang="EN-US">HDC</span>鍙ユ焺鍙傛暟錛岄渶瑕佹寚鍑虹殑鏄?span lang="EN-US">HDC</span>瀹為檯涓婃槸涓涓?span lang="EN-US">HDC__</span>緇撴瀯綾誨瀷鐨勬寚 閽堬紝榪欎釜鍙傛暟鐨勮〃紺哄氨鏄?span lang="EN-US">“PAUHDC__@@”</span>錛屽叾瀹屾暣鐨勫嚱鏁頒慨楗板悕涓?span lang="EN-US">“?DrawText@CTest@@QAEJPAUHDC__@@<a href="mailto:JPBDUtagRGBQUAD@@E_N@Z">JPBDUtagRG</a><a href="mailto:BQUAD@@E_N@Z">BQUAD@@E_N@Z</a>”</span>銆?span lang="EN-US">InsightClass</span>鏄竴涓叡鏈夌殑<span lang="EN-US">const</span>鍑芥暟錛屽畠鐨勬垚鍛樺嚱鏁版爣璇嗘槸<span lang="EN-US"><a href="mailto:%E2%80%9C@@QBE">“@@QBE</a>”</span>錛屽畬鏁寸殑淇グ鍚嶅氨鏄?span lang="EN-US">“?InsightCla<a href="mailto:%E2%80%9C?InsightClass@CTest@@QBEJK@Z">ss@CTest@@QBEJK@Z</a>”</span>銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;">鏃犺鏄?span lang="EN-US">C</span>鍑芥暟鍚嶄慨楗版柟寮忚繕鏄?span lang="EN-US">C++</span>鍑芥暟鍚嶄慨楗版柟寮忓潎涓嶆敼鍙樿緭鍑哄嚱鏁板悕涓殑瀛楃澶у皬鍐欙紝榪欏拰<span lang="EN-US">PASCAL</span>璋冪敤綰﹀畾涓嶅悓錛?span lang="EN-US">PASCAL</span>綰﹀畾杈撳嚭鐨勫嚱鏁板悕鏃犱換浣曚慨楗頒笖鍏ㄩ儴澶у啓銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">3.</span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鏌ョ湅鍑芥暟鐨勫悕瀛椾慨楗?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鏈変袱縐嶆柟寮忓彲浠ユ鏌ヤ綘鐨勭▼搴忎腑鐨勫嚱鏁扮殑鍚嶅瓧淇グ錛氫嬌鐢ㄧ紪璇戣緭鍑哄垪琛ㄦ垨浣跨敤<span lang="EN-US">Dumpbin</span>宸ュ叿銆備嬌鐢?span lang="EN-US">/FAc</span>錛?span lang="EN-US">/FAs</span>鎴?span lang="EN-US">/FAcs</span>鍛戒護琛屽弬鏁板彲浠ヨ緙栬瘧鍣?杈撳嚭鍑芥暟鎴栧彉閲忓悕瀛楀垪琛ㄣ備嬌鐢?span lang="EN-US">dumpbin.exe /SYMBOLS</span>鍛戒護涔熷彲浠ヨ幏寰?span lang="EN-US">obj</span>鏂囦歡鎴?span lang="EN-US">lib</span>鏂囦歡涓殑鍑芥暟鎴栧彉閲忓悕瀛楀垪琛ㄣ傛澶栵紝榪樺彲浠ヤ嬌鐢?span lang="EN-US"> undname.exe </span>灝嗕慨楗板悕杞崲涓烘湭淇グ褰㈠紡銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"> <o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍑芥暟璋冪敤綰﹀畾鍜屽悕瀛椾慨楗拌鍒欎笉鍖歸厤寮曡搗鐨勫父瑙侀棶棰?/span></strong><strong><span style="font-size: 13.5pt; font-family: 瀹嬩綋;" lang="EN-US"><o:p></o:p></span></strong></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍑芥暟璋冪敤鏃跺鏋滃嚭鐜板爢鏍堝紓甯革紝鍗佹湁鍏節鏄敱浜庡嚱鏁拌皟鐢ㄧ害瀹氫笉鍖歸厤寮曡搗鐨勩傛瘮濡傚姩鎬侀摼鎺ュ簱<span lang="EN-US">a</span>鏈変互涓嬪鍑哄嚱鏁幫細<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">long MakeFun(long lFun);<br> <!--[if !supportLineBreakNewLine]--><br> <!--[endif]--><o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍔ㄦ佸簱鐢熸垚鐨勬椂鍊欓噰鐢ㄧ殑鍑芥暟璋冪敤綰﹀畾鏄?span lang="EN-US">__stdcall</span>錛屾墍浠ョ紪璇戠敓鎴愮殑<span lang="EN-US">a.dll</span>涓嚱鏁?span lang="EN-US">MakeFun</span>鐨勮皟鐢ㄧ害 瀹氭槸<span lang="EN-US">_stdcall</span>錛屼篃灝辨槸鍑芥暟璋冪敤鏃跺弬鏁頒粠鍙沖悜宸﹀叆鏍堬紝鍑芥暟榪斿洖鏃惰嚜宸辮繕鍘熷爢鏍堛傜幇鍦ㄦ煇涓▼搴忔ā鍧?span lang="EN-US">b</span>瑕佸紩鐢?span lang="EN-US">a</span>涓殑<span lang="EN-US">MakeFun</span>錛?span lang="EN-US">b</span>鍜?span lang="EN-US">a</span>涓鏍蜂嬌鐢?span lang="EN-US"> C++</span>鏂瑰紡緙栬瘧錛屽彧鏄?span lang="EN-US">b</span>妯″潡鐨勫嚱鏁拌皟鐢ㄦ柟寮忔槸<span lang="EN-US">__cdecl</span>錛岀敱浜?span lang="EN-US">b</span>鍖呭惈浜?span lang="EN-US">a</span>鎻愪緵鐨勫ご鏂囦歡涓?span lang="EN-US">MakeFun</span>鍑芥暟澹版槑錛屾墍浠?span lang="EN-US">MakeFun</span>鍦?span lang="EN-US">b</span>妯″潡涓鍏跺畠 璋冪敤<span lang="EN-US">MakeFun</span>鐨勫嚱鏁拌涓烘槸<span lang="EN-US">__cdecl</span>璋冪敤鏂瑰紡錛?span lang="EN-US">b</span>妯″潡涓殑榪欎簺鍑芥暟鍦ㄨ皟鐢ㄥ畬<span lang="EN-US">MakeFun</span>褰撶劧瑕佸府鐫鎭㈠鍫嗘爤鍟︼紝鍙槸<span lang="EN-US">MakeFun</span>宸茬粡鍦ㄧ粨鏉?鏃惰嚜宸辨仮澶嶄簡鍫嗘爤錛?span lang="EN-US">b</span>妯″潡涓殑鍑芥暟榪欐牱澶氭涓涓懼氨寮曡搗浜嗘爤鎸囬拡閿欒錛屼粠鑰屽紩鍙戝爢鏍堝紓甯搞傚畯瑙備笂鐨勭幇璞″氨鏄嚱鏁拌皟鐢ㄦ病鏈夐棶棰橈紙鍥犱負鍙傛暟浼犻掗『搴忔槸涓鏍?鐨勶級錛?span lang="EN-US">MakeFun</span>涔熷畬鎴愪簡鑷繁鐨勫姛鑳斤紝鍙槸鍑芥暟榪斿洖鍚庡紩鍙戦敊璇傝В鍐崇殑鏂規硶涔熷緢綆鍗曪紝鍙淇濊瘉涓や釜妯″潡鐨勫湪緙栬瘧鏃惰緗浉鍚岀殑鍑芥暟璋冪敤綰﹀畾灝辮浜嗐? <span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US"> <o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">鍦ㄤ簡瑙d簡鍑芥暟璋冪敤綰﹀畾鍜屽嚱鏁扮殑鍚嶄慨楗拌鍒欎箣鍚庯紝鍐嶆潵鐪嬪湪<span lang="EN-US">C++</span>紼嬪簭涓嬌鐢?span lang="EN-US">C</span>璇█緙栬瘧鐨勫簱鏃剁粡甯稿嚭鐜扮殑<span lang="EN-US">LNK 2001</span>閿欒灝卞緢綆鍗曚簡銆傝繕浠ヤ笂闈緥瀛愮殑涓や釜妯″潡涓轟緥錛岃繖涓嬈′袱涓ā鍧楀湪緙栬瘧鐨勬椂鍊欓兘閲囩敤<span lang="EN-US">__stdcall</span>璋冪敤綰﹀畾錛屼絾鏄?span lang="EN-US">a.dll</span>浣跨敤<span lang="EN-US">C</span>璇█鐨勮娉曠紪 璇戠殑錛?span lang="EN-US">C</span>璇█鏂瑰紡錛夛紝鎵浠?span lang="EN-US">a.dll</span>鐨勮澆鍏ュ簱<span lang="EN-US">a.lib</span>涓?span lang="EN-US">MakeFun</span>鍑芥暟鐨勫悕瀛椾慨楗板氨鏄?span lang="EN-US"><a href="mailto:%E2%80%9C_MakeFun@4">“_MakeFun@4</a>”</span>銆?span lang="EN-US">b</span>鍖呭惈浜?span lang="EN-US">a</span>鎻愪緵鐨勫ご鏂囦歡涓?span lang="EN-US">MakeFun</span>鍑芥暟澹版槑錛屼絾鏄敱浜?span lang="EN-US">b</span>閲囩敤鐨勬槸<span lang="EN-US">C++</span>璇█緙栬瘧錛屾墍浠?span lang="EN-US">MakeFun</span>鍦?span lang="EN-US">b</span>妯″潡涓鎸夌収<span lang="EN-US">C++</span>鐨勫悕瀛椾慨楗拌鍒欏懡鍚嶄負<span lang="EN-US">“?MakeFu<a href="mailto:%E2%80%9C?MakeFun@@YGJJ@Z">n@@YGJJ@Z</a>”</span>錛岀紪璇戣繃紼嬬浉瀹夋棤浜嬶紝閾炬帴紼嬪簭鏃?span lang="EN-US">c++</span>鐨勯摼鎺ュ櫒灝卞埌<span lang="EN-US">a.lib</span>涓幓鎵?span lang="EN-US"><a href="mailto:%E2%80%9C?MakeFun@@YGJJ@Z">“?MakeFun@@YGJJ@Z</a>”</span>錛屼絾鏄?span lang="EN-US">a.lib</span>涓彧鏈?span lang="EN-US">“_Ma<a href="mailto:%E2%80%9C_MakeFun@4">keFun@4</a>”</span>錛屾病鏈?span lang="EN-US"><a href="mailto:%E2%80%9C?MakeFun@@YGJJ@Z">“?MakeFun@@YGJJ@Z</a>”</span>錛屼簬鏄摼鎺ュ櫒灝辨姤鍛婏細<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">error LNK2001: unresolved external symbol <a href="mailto:?MakeFun@@YGJJ@Z">?MakeFun@@YGJJ@Z</a><o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;">瑙e喅鐨勬柟娉曞拰綆鍗曪紝灝辨槸瑕佽<span lang="EN-US">b</span>妯″潡鐭ラ亾榪欎釜鍑芥暟鏄?span lang="EN-US">C</span>璇█緙栬瘧鐨勶紝<span lang="EN-US">extern "C"</span>鍙互鍋氬埌榪欎竴鐐廣備竴涓噰鐢?span lang="EN-US">C</span>璇█緙栬瘧鐨勫簱搴旇鑰冭檻鍒頒嬌鐢ㄨ繖涓簱鐨勭▼搴忓彲鑳芥槸<span lang="EN-US">C++</span>紼嬪簭錛堜嬌鐢?span lang="EN-US">C++</span>緙栬瘧鍣級錛屾墍浠ュ湪璁捐澶存枃浠舵椂搴旇娉ㄦ剰榪欎竴鐐廣傞氬父搴旇榪欐牱澹版槑澶存枃浠訛細<span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">#ifdef _cplusplus<br> extern "C" {<br> #endif<br> <br> long MakeFun(long lFun);<br> <br> #ifdef _cplusplus<br> }<br> #endif<br> <!--[if !supportLineBreakNewLine]--><br> <!--[endif]--><o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;">榪欐牱<span lang="EN-US">C++</span>鐨勭紪璇戝櫒灝辯煡閬?span lang="EN-US">MakeFun</span>鐨勪慨楗板悕鏄?span lang="EN-US"><a href="mailto:%E2%80%9C_MakeFun@4">“_MakeFun@4</a>”</span>錛屽氨涓嶄細鏈夐摼鎺ラ敊璇簡銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 瀹嬩綋;" lang="EN-US">    </span><span style="font-size: 12pt; font-family: 瀹嬩綋;">璁稿浜轟笉鏄庣櫧錛屼負浠涔堟垜浣跨敤鐨勭紪璇戝櫒閮芥槸<span lang="EN-US">VC</span>鐨勭紪璇戝櫒榪樹細浜х敓<span lang="EN-US">“error LNK<st1:chmetcnv unitname="”" sourcevalue="2001" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">2001”</st1:chmetcnv></span>閿欒錛熷叾瀹烇紝<span lang="EN-US">VC</span>鐨勭紪璇戝櫒浼氭牴鎹簮鏂囦歡鐨勬墿灞曞悕閫夋嫨緙栬瘧鏂瑰紡錛屽鏋滄枃浠剁殑鎵╁睍鍚嶆槸<span lang="EN-US">“.C”</span>錛岀紪璇戝櫒浼氶噰鐢?span lang="EN-US">C</span>鐨勮娉曠紪璇戯紝濡傛灉鎵╁睍鍚嶆槸<span lang="EN-US"> “.cpp”</span>錛岀紪璇戝櫒浼氫嬌鐢?span lang="EN-US">C++</span>鐨勮娉曠紪璇戠▼搴忥紝鎵浠ワ紝鏈濂界殑鏂規硶灝辨槸浣跨敤<span lang="EN-US">extern "C"</span>銆?span lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><img src ="http://www.shnenglu.com/netboy/aggbug/73849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/netboy/" target="_blank">鐜嬪媷鑹?/a> 2009-02-15 10:43 <a href="http://www.shnenglu.com/netboy/archive/2009/02/15/73849.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀛楃緙栫爜絎旇錛欰SCII錛孶nicode鍜孶TF-8錛堣漿錛?/title><link>http://www.shnenglu.com/netboy/archive/2009/02/15/73847.html</link><dc:creator>鐜嬪媷鑹?/dc:creator><author>鐜嬪媷鑹?/author><pubDate>Sun, 15 Feb 2009 02:38:00 GMT</pubDate><guid>http://www.shnenglu.com/netboy/archive/2009/02/15/73847.html</guid><wfw:comment>http://www.shnenglu.com/netboy/comments/73847.html</wfw:comment><comments>http://www.shnenglu.com/netboy/archive/2009/02/15/73847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/netboy/comments/commentRss/73847.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/netboy/services/trackbacks/73847.html</trackback:ping><description><![CDATA[<p><strong>1. ASCII鐮?/strong></p> <p>鎴戜滑鐭ラ亾錛屽湪璁$畻鏈哄唴閮紝鎵鏈夌殑淇℃伅鏈緇堥兘琛ㄧず涓轟竴涓簩榪涘埗鐨勫瓧絎︿覆銆傛瘡涓涓簩榪涘埗浣嶏紙bit錛夋湁0鍜?涓ょ鐘舵侊紝鍥犳鍏釜浜岃繘鍒朵綅灝卞彲浠ョ粍鍚堝嚭 256縐嶇姸鎬侊紝榪欒縐頒負涓涓瓧鑺傦紙byte錛夈備篃灝辨槸璇達紝涓涓瓧鑺備竴鍏卞彲浠ョ敤鏉ヨ〃紺?56縐嶄笉鍚岀殑鐘舵侊紝姣忎竴涓姸鎬佸搴斾竴涓鍙鳳紝灝辨槸256涓鍙鳳紝浠? 0000000鍒?1111111銆?/p> <p>涓婁釜涓栫邯60騫翠唬錛岀編鍥藉埗瀹氫簡涓濂楀瓧絎︾紪鐮侊紝瀵硅嫳璇瓧絎︿笌浜岃繘鍒朵綅涔嬮棿鐨勫叧緋伙紝鍋氫簡緇熶竴瑙勫畾銆傝繖琚О涓篈SCII鐮侊紝涓鐩存部鐢ㄨ嚦浠娿?/p> <p>ASCII鐮佷竴鍏辮瀹氫簡128涓瓧絎︾殑緙栫爜錛屾瘮濡傜┖鏍?#8220;SPACE”鏄?2錛堜簩榪涘埗00100000錛夛紝澶у啓鐨勫瓧姣岮鏄?5錛堜簩榪涘埗01000001錛夈傝繖128涓鍙鳳紙鍖呮嫭32涓笉鑳芥墦鍗板嚭鏉ョ殑鎺у埗絎﹀彿錛夛紝鍙崰鐢ㄤ簡涓涓瓧鑺傜殑鍚庨潰7浣嶏紝鏈鍓嶉潰鐨?浣嶇粺涓瑙勫畾涓?銆?/p> <p><strong>2銆侀潪ASCII緙栫爜</strong></p> <p>鑻辮鐢?28涓鍙風紪鐮佸氨澶熶簡錛屼絾鏄敤鏉ヨ〃紺哄叾浠栬璦錛?28涓鍙鋒槸涓嶅鐨勩傛瘮濡傦紝鍦ㄦ硶璇腑錛屽瓧姣嶄笂鏂規湁娉ㄩ煶絎﹀彿錛屽畠灝辨棤娉曠敤ASCII鐮佽〃紺恒? 浜庢槸錛屼竴浜涙媧插浗瀹跺氨鍐沖畾錛屽埄鐢ㄥ瓧鑺備腑闂茬疆鐨勬渶楂樹綅緙栧叆鏂扮殑絎﹀彿銆傛瘮濡傦紝娉曡涓殑é鐨勭紪鐮佷負130錛堜簩榪涘埗10000010錛夈傝繖鏍蜂竴鏉ワ紝榪欎簺嬈ф床鍥藉浣? 鐢ㄧ殑緙栫爜浣撶郴錛屽彲浠ヨ〃紺烘渶澶?56涓鍙楓?/p> <p>浣嗘槸錛岃繖閲屽張鍑虹幇浜嗘柊鐨勯棶棰樸備笉鍚岀殑鍥藉鏈変笉鍚岀殑瀛楁瘝錛屽洜姝わ紝鍝曞畠浠兘浣跨敤256涓鍙風殑緙栫爜鏂瑰紡錛屼唬琛ㄧ殑瀛楁瘝鍗翠笉涓鏍楓傛瘮濡傦紝130鍦ㄦ硶璇紪鐮? 涓唬琛ㄤ簡é錛屽湪甯屼集鏉ヨ緙栫爜涓嵈浠h〃浜嗗瓧姣岹imel (讙)錛屽湪淇勮緙栫爜涓張浼氫唬琛ㄥ彟涓涓鍙楓備絾鏄笉綆℃庢牱錛屾墍鏈夎繖浜涚紪鐮佹柟寮忎腑錛?鈥?27琛ㄧず鐨勭鍙鋒槸涓鏍風殑錛屼笉涓鏍風殑鍙槸128鈥?55鐨勮繖涓孌點?/p> <p>鑷充簬浜氭床鍥藉鐨勬枃瀛楋紝浣跨敤鐨勭鍙峰氨鏇村浜嗭紝姹夊瓧灝卞杈?0涓囧乏鍙熾備竴涓瓧鑺傚彧鑳借〃紺?56縐嶇鍙鳳紝鑲畾鏄笉澶熺殑錛屽氨蹇呴』浣跨敤澶氫釜瀛楄妭琛ㄨ揪涓涓鍙楓? 姣斿錛岀畝浣撲腑鏂囧父瑙佺殑緙栫爜鏂瑰紡鏄疓B2312錛屼嬌鐢ㄤ袱涓瓧鑺傝〃紺轟竴涓眽瀛楋紝鎵浠ョ悊璁轟笂鏈澶氬彲浠ヨ〃紺?56x256=65536涓鍙楓?/p> <p>涓枃緙栫爜鐨勯棶棰橀渶瑕佷笓鏂囪璁猴紝榪欑瘒絎旇涓嶆秹鍙娿傝繖閲屽彧鎸囧嚭錛岃櫧鐒墮兘鏄敤澶氫釜瀛楄妭琛ㄧず涓涓鍙鳳紝浣嗘槸GB綾葷殑姹夊瓧緙栫爜涓庡悗鏂囩殑Unicode鍜孶TF-8鏄鏃犲叧緋葷殑銆?/p> <p><strong>3.Unicode</strong></p> <p>姝e涓婁竴鑺傛墍璇達紝涓栫晫涓婂瓨鍦ㄧ潃澶氱緙栫爜鏂瑰紡錛屽悓涓涓簩榪涘埗鏁板瓧鍙互琚В閲婃垚涓嶅悓鐨勭鍙楓傚洜姝わ紝瑕佹兂鎵撳紑涓涓枃鏈枃浠訛紝灝卞繀欏葷煡閬撳畠鐨勭紪鐮佹柟寮忥紝鍚﹀垯鐢ㄩ敊璇殑緙栫爜鏂瑰紡瑙h錛屽氨浼氬嚭鐜頒貢鐮併備負浠涔堢數瀛愰偖浠跺父甯稿嚭鐜頒貢鐮侊紵灝辨槸鍥犱負鍙戜俊浜哄拰鏀朵俊浜轟嬌鐢ㄧ殑緙栫爜鏂瑰紡涓嶄竴鏍楓?/p> <p>鍙互鎯寵薄錛屽鏋滄湁涓縐嶇紪鐮侊紝灝嗕笘鐣屼笂鎵鏈夌殑絎﹀彿閮界撼鍏ュ叾涓傛瘡涓涓鍙烽兘緇欎簣涓涓嫭涓鏃犱簩鐨勭紪鐮侊紝閭d箞涔辯爜闂灝變細娑堝け銆傝繖灝辨槸Unicode錛屽氨鍍忓畠鐨勫悕瀛楅兘琛ㄧず鐨勶紝榪欐槸涓縐嶆墍鏈夌鍙風殑緙栫爜銆?/p> <p>Unicode褰撶劧鏄竴涓緢澶х殑闆嗗悎錛岀幇鍦ㄧ殑瑙勬ā鍙互瀹圭撼100澶氫竾涓鍙楓傛瘡涓鍙風殑緙栫爜閮戒笉涓鏍鳳紝姣斿錛孶+0639琛ㄧず闃挎媺浼瓧姣岮in錛孶+0041琛ㄧず鑻辮鐨勫ぇ鍐欏瓧姣岮錛孶+4E25琛ㄧず姹夊瓧“涓?#8221;銆傚叿浣撶殑絎﹀彿瀵瑰簲琛紝鍙互鏌ヨ<a target="_blank">unicode.org</a>錛屾垨鑰呬笓闂ㄧ殑<a target="_blank">姹夊瓧瀵瑰簲琛?/a>銆?</p> <p><strong>4. Unicode鐨勯棶棰?/strong></p> <p>闇瑕佹敞鎰忕殑鏄紝Unicode鍙槸涓涓鍙烽泦錛屽畠鍙瀹氫簡絎﹀彿鐨勪簩榪涘埗浠g爜錛屽嵈娌℃湁瑙勫畾榪欎釜浜岃繘鍒朵唬鐮佸簲璇ュ浣曞瓨鍌ㄣ?/p> <p>姣斿錛屾眽瀛?#8220;涓?#8221;鐨剈nicode鏄崄鍏繘鍒舵暟4E25錛岃漿鎹㈡垚浜岃繘鍒舵暟瓚寵凍鏈?5浣嶏紙100111000100101錛夛紝涔熷氨鏄榪欎釜絎﹀彿鐨勮〃紺鴻嚦灝戦渶瑕?涓瓧鑺傘傝〃紺哄叾浠栨洿澶х殑絎﹀彿錛屽彲鑳介渶瑕?涓瓧鑺傛垨鑰?涓瓧鑺傦紝鐢氳嚦鏇村銆?/p> <p>榪欓噷灝辨湁涓や釜涓ラ噸鐨勯棶棰橈紝絎竴涓棶棰樻槸錛屽浣曟墠鑳藉尯鍒玼nicode鍜宎scii錛熻綆楁満鎬庝箞鐭ラ亾涓変釜瀛楄妭琛ㄧず涓涓鍙鳳紝鑰屼笉鏄垎鍒〃紺轟笁涓鍙? 鍛紵絎簩涓棶棰樻槸錛屾垜浠凡緇忕煡閬擄紝鑻辨枃瀛楁瘝鍙敤涓涓瓧鑺傝〃紺哄氨澶熶簡錛屽鏋渦nicode緇熶竴瑙勫畾錛屾瘡涓鍙風敤涓変釜鎴栧洓涓瓧鑺傝〃紺猴紝閭d箞姣忎釜鑻辨枃瀛楁瘝鍓嶉兘蹇? 鐒舵湁浜屽埌涓変釜瀛楄妭鏄?錛岃繖瀵逛簬瀛樺偍鏉ヨ鏄瀬澶х殑嫻垂錛屾枃鏈枃浠剁殑澶у皬浼氬洜姝ゅぇ鍑轟簩涓夊嶏紝榪欐槸鏃犳硶鎺ュ彈鐨勩?/p> <p>瀹冧滑閫犳垚鐨勭粨鏋滄槸錛?錛夊嚭鐜頒簡unicode鐨勫縐嶅瓨鍌ㄦ柟寮忥紝涔熷氨鏄鏈夎澶氱涓嶅悓鐨勪簩榪涘埗鏍煎紡錛屽彲浠ョ敤鏉ヨ〃紺簎nicode銆?錛塽nicode鍦ㄥ緢闀夸竴孌墊椂闂村唴鏃犳硶鎺ㄥ箍錛岀洿鍒頒簰鑱旂綉鐨勫嚭鐜般?/p> <p><strong>5.UTF-8</strong></p> <p>浜掕仈緗戠殑鏅強錛屽己鐑堣姹傚嚭鐜頒竴縐嶇粺涓鐨勭紪鐮佹柟寮忋俇TF-8灝辨槸鍦ㄤ簰鑱旂綉涓婁嬌鐢ㄦ渶騫跨殑涓縐島nicode鐨勫疄鐜版柟寮忋傚叾浠栧疄鐜版柟寮忚繕鍖呮嫭UTF-16鍜孶TF-32錛屼笉榪囧湪浜掕仈緗戜笂鍩烘湰涓嶇敤銆?strong>閲嶅涓閬嶏紝榪欓噷鐨勫叧緋繪槸錛孶TF-8鏄疷nicode鐨勫疄鐜版柟寮忎箣涓銆?/strong></p> <p>UTF-8鏈澶х殑涓涓壒鐐癸紝灝辨槸瀹冩槸涓縐嶅彉闀跨殑緙栫爜鏂瑰紡銆傚畠鍙互浣跨敤1~4涓瓧鑺傝〃紺轟竴涓鍙鳳紝鏍規嵁涓嶅悓鐨勭鍙瘋屽彉鍖栧瓧鑺傞暱搴︺?/p> <p>UTF-8鐨勭紪鐮佽鍒欏緢綆鍗曪紝鍙湁浜屾潯錛?/p> <p>1錛夊浜庡崟瀛楄妭鐨勭鍙鳳紝瀛楄妭鐨勭涓浣嶈涓?錛屽悗闈?浣嶄負榪欎釜絎﹀彿鐨剈nicode鐮併傚洜姝ゅ浜庤嫳璇瓧姣嶏紝UTF-8緙栫爜鍜孉SCII鐮佹槸鐩稿悓鐨勩?/p> <p>2錛夊浜巒瀛楄妭鐨勭鍙鳳紙n>1錛夛紝絎竴涓瓧鑺傜殑鍓峮浣嶉兘璁句負1錛岀n+1浣嶈涓?錛屽悗闈㈠瓧鑺傜殑鍓嶄袱浣嶄竴寰嬭涓?0銆傚墿涓嬬殑娌℃湁鎻愬強鐨勪簩榪涘埗浣嶏紝鍏ㄩ儴涓鴻繖涓鍙風殑unicode鐮併?/p> <p>涓嬭〃鎬葷粨浜嗙紪鐮佽鍒欙紝瀛楁瘝x琛ㄧず鍙敤緙栫爜鐨勪綅銆?/p> <blockquote> <div> <p> Unicode絎﹀彿鑼冨洿 | UTF-8緙栫爜鏂瑰紡<br> (鍗佸叚榪涘埗) | 錛堜簩榪涘埗錛?br> --------------------+---------------------------------------------<br> 0000 0000-0000 007F | 0xxxxxxx<br> 0000 0080-0000 07FF | 110xxxxx 10xxxxxx<br> 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx<br> 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</p> </div> </blockquote> <p>涓嬮潰錛岃繕鏄互姹夊瓧“涓?#8221;涓轟緥錛屾紨紺哄浣曞疄鐜癠TF-8緙栫爜銆?/p> <p>宸茬煡“涓?#8221;鐨剈nicode鏄?E25錛?00111000100101錛夛紝鏍規嵁涓婅〃錛屽彲浠ュ彂鐜?E25澶勫湪絎笁琛岀殑鑼冨洿鍐咃紙0000 0800-0000 FFFF錛夛紝鍥犳“涓?#8221;鐨刄TF-8緙栫爜闇瑕佷笁涓瓧鑺傦紝鍗蟲牸寮忔槸“1110xxxx 10xxxxxx 10xxxxxx”銆傜劧鍚庯紝浠?#8220;涓?#8221;鐨勬渶鍚庝竴涓簩榪涘埗浣嶅紑濮嬶紝渚濇浠庡悗鍚戝墠濉叆鏍煎紡涓殑x錛屽鍑虹殑浣嶈ˉ0銆傝繖鏍峰氨寰楀埌浜嗭紝“涓?#8221;鐨刄TF-8緙栫爜鏄? “11100100 10111000 10100101”錛岃漿鎹㈡垚鍗佸叚榪涘埗灝辨槸E4B8A5銆?/p> <p><strong>6. Unicode涓嶶TF-8涔嬮棿鐨勮漿鎹?/strong></p> <p>閫氳繃涓婁竴鑺傜殑渚嬪瓙錛屽彲浠ョ湅鍒?#8220;涓?#8221;鐨刄nicode鐮佹槸4E25錛孶TF-8緙栫爜鏄疎4B8A5錛屼袱鑰呮槸涓嶄竴鏍風殑銆傚畠浠箣闂寸殑杞崲鍙互閫氳繃紼嬪簭瀹炵幇銆?/p> <p>鍦╓indows騫沖彴涓嬶紝鏈変竴涓渶綆鍗曠殑杞寲鏂規硶錛屽氨鏄嬌鐢ㄥ唴緗殑璁頒簨鏈皬紼嬪簭Notepad.exe銆傛墦寮鏂囦歡鍚庯紝鐐瑰嚮“鏂囦歡”鑿滃崟涓殑“鍙﹀瓨涓?#8221;鍛戒護錛屼細璺沖嚭涓涓璇濇錛屽湪鏈搴曢儴鏈変竴涓?#8220;緙栫爜”鐨勪笅鎷夋潯銆?/p> <p><a ><img src="http://www.ruanyifeng.com/blog/2007/10/bg2007102801-thumb.jpg" alt="bg2007102801.jpg" height="227" width="500"></a></p> <p>閲岄潰鏈夊洓涓夐」錛欰NSI錛孶nicode錛孶nicode big endian 鍜?UTF-8銆?/p> <p>1錛堿NSI鏄粯璁ょ殑緙栫爜鏂瑰紡銆傚浜庤嫳鏂囨枃浠舵槸ASCII緙栫爜錛屽浜庣畝浣撲腑鏂囨枃浠舵槸GB2312緙栫爜錛堝彧閽堝Windows綆浣撲腑鏂囩増錛屽鏋滄槸綣佷綋涓枃鐗堜細閲囩敤Big5鐮侊級銆?/p> <p>2錛塙nicode緙栫爜鎸囩殑鏄疷CS-2緙栫爜鏂瑰紡錛屽嵆鐩存帴鐢ㄤ袱涓瓧鑺傚瓨鍏ュ瓧絎︾殑Unicode鐮併傝繖涓夐」鐢ㄧ殑little endian鏍煎紡銆?/p> <p>3錛塙nicode big endian緙栫爜涓庝笂涓涓夐」鐩稿搴斻傛垜鍦ㄤ笅涓鑺備細瑙i噴little endian鍜宐ig endian鐨勬兜涔夈?/p> <p>4錛塙TF-8緙栫爜錛屼篃灝辨槸涓婁竴鑺傝皥鍒扮殑緙栫爜鏂規硶銆?/p> <p>閫夋嫨瀹?#8221;緙栫爜鏂瑰紡“鍚庯紝鐐瑰嚮”淇濆瓨“鎸夐挳錛屾枃浠剁殑緙栫爜鏂瑰紡灝辯珛鍒昏漿鎹㈠ソ浜嗐?/p> <p><strong>7. Little endian鍜孊ig endian</strong></p> <p>涓婁竴鑺傚凡緇忔彁鍒幫紝Unicode鐮佸彲浠ラ噰鐢║CS-2鏍煎紡鐩存帴瀛樺偍銆備互姹夊瓧”涓?#8220;涓轟緥錛孶nicode鐮佹槸4E25錛岄渶瑕佺敤涓や釜瀛楄妭瀛樺偍錛屼竴涓瓧鑺? 鏄?E錛屽彟涓涓瓧鑺傛槸25銆傚瓨鍌ㄧ殑鏃跺欙紝4E鍦ㄥ墠錛?5鍦ㄥ悗錛屽氨鏄疊ig endian鏂瑰紡錛?5鍦ㄥ墠錛?E鍦ㄥ悗錛屽氨鏄疞ittle endian鏂瑰紡銆?/p> <p>榪欎袱涓彜鎬殑鍚嶇О鏉ヨ嚜鑻卞浗浣滃鏂▉澶壒鐨勩婃牸鍒椾經娓歌銆嬨傚湪璇ヤ功涓紝灝忎漢鍥介噷鐖嗗彂浜嗗唴鎴橈紝鎴樹簤璧峰洜鏄漢浠簤璁猴紝鍚冮浮铔嬫椂絀剁珶鏄粠澶уご(Big- Endian)鏁插紑榪樻槸浠庡皬澶?Little-Endian)鏁插紑銆備負浜嗚繖浠朵簨鎯咃紝鍓嶅悗鐖嗗彂浜嗗叚嬈℃垬浜夛紝涓涓殗甯濋佷簡鍛斤紝鍙︿竴涓殗甯濅涪浜嗙帇浣嶃?/p> <p>鍥犳錛岀涓涓瓧鑺傚湪鍓嶏紝灝辨槸”澶уご鏂瑰紡“錛圔ig endian錛夛紝絎簩涓瓧鑺傚湪鍓嶅氨鏄?#8221;灝忓ご鏂瑰紡“錛圠ittle endian錛夈?/p> <p>閭d箞寰堣嚜鐒剁殑錛屽氨浼氬嚭鐜頒竴涓棶棰橈細璁$畻鏈烘庝箞鐭ラ亾鏌愪竴涓枃浠跺埌搴曢噰鐢ㄥ摢涓縐嶆柟寮忕紪鐮侊紵</p> <p>Unicode瑙勮寖涓畾涔夛紝姣忎竴涓枃浠剁殑鏈鍓嶉潰鍒嗗埆鍔犲叆涓涓〃紺虹紪鐮侀『搴忕殑瀛楃錛岃繖涓瓧絎︾殑鍚嶅瓧鍙仛”闆跺搴﹂潪鎹㈣絀烘牸“錛圸ERO WIDTH NO-BREAK SPACE錛夛紝鐢‵EFF琛ㄧず銆傝繖姝eソ鏄袱涓瓧鑺傦紝鑰屼笖FF姣擣E澶?銆?/p> <p>濡傛灉涓涓枃鏈枃浠剁殑澶翠袱涓瓧鑺傛槸FE FF錛屽氨琛ㄧず璇ユ枃浠墮噰鐢ㄥぇ澶存柟寮忥紱濡傛灉澶翠袱涓瓧鑺傛槸FF FE錛屽氨琛ㄧず璇ユ枃浠墮噰鐢ㄥ皬澶存柟寮忋?/p> <p><strong>8. 瀹炰緥</strong></p> <p>涓嬮潰錛屼婦涓涓疄渚嬨?/p> <p>鎵撳紑”璁頒簨鏈?#8220;紼嬪簭Notepad.exe錛屾柊寤轟竴涓枃鏈枃浠訛紝鍐呭灝辨槸涓涓?#8221;涓?#8220;瀛楋紝渚濇閲囩敤ANSI錛孶nicode錛孶nicode big endian 鍜?UTF-8緙栫爜鏂瑰紡淇濆瓨銆?/p> <p>鐒跺悗錛岀敤鏂囨湰緙栬緫杞歡<a target="_blank">UltraEdit涓?/a>鐨?#8221;鍗佸叚榪涘埗鍔熻兘“錛岃瀵熻鏂囦歡鐨勫唴閮ㄧ紪鐮佹柟寮忋?/p> <p>1錛堿NSI錛氭枃浠剁殑緙栫爜灝辨槸涓や釜瀛楄妭“D1 CF”錛岃繖姝f槸“涓?#8221;鐨凣B2312緙栫爜錛岃繖涔熸殫紺篏B2312鏄噰鐢ㄥぇ澶存柟寮忓瓨鍌ㄧ殑銆?/p> <p>2錛塙nicode錛氱紪鐮佹槸鍥涗釜瀛楄妭“FF FE 25 4E”錛屽叾涓?#8220;FF FE”琛ㄦ槑鏄皬澶存柟寮忓瓨鍌紝鐪熸鐨勭紪鐮佹槸4E25銆?/p> <p>3錛塙nicode big endian錛氱紪鐮佹槸鍥涗釜瀛楄妭“FE FF 4E 25”錛屽叾涓?#8220;FE FF”琛ㄦ槑鏄ぇ澶存柟寮忓瓨鍌ㄣ?/p> <p>4錛塙TF-8錛氱紪鐮佹槸鍏釜瀛楄妭“EF BB BF E4 B8 A5”錛屽墠涓変釜瀛楄妭“EF BB BF”琛ㄧず榪欐槸UTF-8緙栫爜錛屽悗涓変釜“E4B8A5”灝辨槸“涓?#8221;鐨勫叿浣撶紪鐮侊紝瀹冪殑瀛樺偍欏哄簭涓庣紪鐮侀『搴忔槸涓鑷寸殑銆?/p> <p><strong>9. 寤朵幾闃呰</strong></p> <p>* <a target="_blank">The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets</a>錛堝叧浜庡瓧絎﹂泦鐨勬渶鍩烘湰鐭ヨ瘑錛?/p> <p>* <a target="_blank">璋堣皥Unicode緙栫爜</a></p> <p>* <a target="_blank">RFC3629錛歎TF-8, a transformation format of ISO 10646</a>錛堝鏋滃疄鐜癠TF-8鐨勮瀹氾級</p><img src ="http://www.shnenglu.com/netboy/aggbug/73847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/netboy/" target="_blank">鐜嬪媷鑹?/a> 2009-02-15 10:38 <a href="http://www.shnenglu.com/netboy/archive/2009/02/15/73847.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>姝g‘鐨勪嬌鐢–ComSafeArray,CComVariant鍜孋ComBSTR錛堣漿錛?/title><link>http://www.shnenglu.com/netboy/archive/2009/02/15/73846.html</link><dc:creator>鐜嬪媷鑹?/dc:creator><author>鐜嬪媷鑹?/author><pubDate>Sun, 15 Feb 2009 02:37:00 GMT</pubDate><guid>http://www.shnenglu.com/netboy/archive/2009/02/15/73846.html</guid><wfw:comment>http://www.shnenglu.com/netboy/comments/73846.html</wfw:comment><comments>http://www.shnenglu.com/netboy/archive/2009/02/15/73846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/netboy/comments/commentRss/73846.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/netboy/services/trackbacks/73846.html</trackback:ping><description><![CDATA[濡傛灉浣犵敤C++鏉ョ紪鍐機OM錛岄偅涔堜綘灝嗗繀涓嶅彲灝戠殑浣跨敤榪欎笁涓被鍨嬨備嬌鐢ㄨ繖涓夌wrapper class姣棤鐤戦棶浼氱畝鍖栨垜浠殑緙栫▼錛屼嬌寰椾嬌鐢⊿AFEARRAY, VARIANT鍜孊STR綆鍗曘備絾鏄紝浣跨敤榪欎笁涓被鍨嬩緷鐒墮渶瑕佸皬蹇冿紝鍥犱負浣跨敤涓嶅綋鐨勮瘽錛屽氨浼氶犳垚鍐呭瓨娉勬紡錛屾垨鏁堢巼闄嶄綆銆?br><br>1. 濡傛灉鎷瘋礉涓や釜BSTR<br>鍋囧鎴戜滑涓涓狟STR錛岃繖涓椂鍊欐垜甯屾湜澶嶅埗涓浠紹STR錛屽茍涓㈠純涔嬪墠鐨凚STR銆傞氬父鎴戜滑浼氳繖涔堝啓錛?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">CComBSTR StringToBSTR(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> </span><span style="color: #000000;">&</span><span style="color: #000000;"> sVal)<br>{<br>     CComBSTR bstrValue </span><span style="color: #000000;">=</span><span style="color: #000000;"> sVal.data();<br>     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> bstrValue;<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>     CComBSTR vValue </span><span style="color: #000000;">=</span><span style="color: #000000;"> StringToBSTR(</span><span style="color: #000000;">"</span><span style="color: #000000;">value</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div> <br>褰撶劧錛屼笂闈㈣繖涓▼搴忔病鏈変換浣曢棶棰橈紝涓嶄細鏈変換浣曞唴瀛樻硠婕忕殑鍙兘銆備絾鏄紝浣犳湁娌℃湁涓婇潰浠g爜閲岄兘鍙戠敓浜嗕粈涔堜簡錛?br>絳旀寰堢畝鍗曪紝鍦ㄥ嚱鏁癝tringToBSTR閲岄潰錛岃bstrValue榪斿洖鐨勬椂鍊欙紝浼氳皟鐢–ComBSTR::Copy()錛屽湪Copy()閲岄潰灝嗕細璋冪敤<br> ::SysAllocStringByteLen()<br>榪欎釜鍑芥暟銆傝屽悗鍦ㄧ粰vValue璧嬪肩殑鏃跺欙紝鍙?浼氳皟鐢ㄤ竴嬈?br>::SysAllocString()<br>鏄捐屾槗瑙侊紝寮閿寰堝ぇ銆?br><br>閭d箞錛屾垜浠皢鎬庝箞鏀硅繘榪欐浠g爜浜嗭紵<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">BSTR StringToBSTR(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> </span><span style="color: #000000;">&</span><span style="color: #000000;"> sVal)<br>{<br>     CComBSTR bstrValue </span><span style="color: #000000;">=</span><span style="color: #000000;"> sVal.data();<br>     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> bstrValue.Detach();<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>     CComBSTR vValue.Attach(StringToBSTR(</span><span style="color: #000000;">"</span><span style="color: #000000;">value</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br><br>     </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div> 榪欐牱錛岄氳繃CComBSTR::Detach()錛屾垜浠皢BSTR榪斿洖鍥炴潵錛岄氳繃CComBSTR::Attach()錛屾垜浠皢BSTR鎸囬拡瀛樺偍璧鋒潵銆傝繖鏍鳳紝灝卞噺灝忎簡涓ゆ寮閿錛屽ぇ澶ф彁楂樹簡鏁堢巼錛屼篃涓嶄細閫犳垚鍐呭瓨鏁堢巼銆?br><br>2. 濡備綍浣跨敤CComSafeArray<br>浣? 鐢–ComSafeArray鐨勪竴涓渶澶х殑濂藉錛屽氨鏄畠浼氳嚜鍔ㄩ噴鏀懼厓绱犳槸VARIANT鍜孊STR銆備篃灝辨槸璇達紝濡傛灉浣犵殑綾誨瀷鏄疺ARIANT錛屽畠浼氳嚜鍔ㄨ皟 鐢?:VariantClear()銆傚鏋滀綘鐨勭被鍨嬫槸BSTR錛屼粬浼氳嚜鍔ㄨ皟鐢?:SysStringFree()鏂規硶銆備絾鏄嬌鐢ㄥ畠鐨勬椂鍊欙紝鍚屾牱瑕佸皬蹇冦?br>2.1 鎴愬浣跨敤::SafeArrayAccessData()鍜?:SafeArrayUnaccessData()<br>鎴戜滑鏈夋椂鍊欎細榪欐牱浣跨敤CComSafeArray鐨勫厓绱狅細<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;"> DoSomething()<br>{<br>     CComSafeArray</span><span style="color: #000000;"><</span><span style="color: #0000ff;">double</span><span style="color: #000000;">></span><span style="color: #000000;"> pSafeArray(</span><span style="color: #000000;">3</span><span style="color: #000000;">);<br>     </span><span style="color: #0000ff;">double</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;"> pVal </span><span style="color: #000000;">=</span><span style="color: #000000;"> NULL;<br>     ::SafeArrayAccessData(pSafeArray</span><span style="color: #000000;">.</span><span style="color: #000000;">m_psa, (</span><span style="color: #0000ff;">void</span><span style="color: #000000;">**</span><span style="color: #000000;">)</span><span style="color: #000000;">&</span><span style="color: #000000;">pVal);<br><br>     </span><span style="color: #008000;">//</span><span style="color: #008000;">handle the elements through the pVal;</span><span style="color: #008000;"><br></span><span style="color: #000000;">}</span></div> 鍥犱負::SafeArrayAccessData 鏂規硶浼氬湪SFAEARRAY涓婄粰lock鍔?. 濡傛灉涓婇潰紼嬪簭鏄劇ず璋冪敤CComSafeArray::Destroy()鍑芥暟錛屼綘媯鏌ュ畠榪斿洖鏉ョ殑HRESULT鐨勬椂鍊欙紝搴旇鏄笅闈㈢殑鍊鹼細<br>        hr    0x8002000d 鍐呭瓨宸查攣瀹氥?    HRESULT<br>濡傛灉浣犱笉浠旂粏媯鏌ワ紝閭d箞灝嗛犳垚CComSafeArray娌℃湁閲婃斁銆?br>2.2 浠嶤ComSafeArray杞負鎴怌ComVariant<br>鏈夋椂鍊欐垜浠嬌鐢–ComVariant鍖呰SAFEARRY銆備綘浼氳繖鏍峰啓浠g爜錛?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;"> DoSomething()<br>{<br>     CComSafeArray</span><span style="color: #000000;"><</span><span style="color: #0000ff;">double</span><span style="color: #000000;">></span><span style="color: #000000;"> pSafeArray(</span><span style="color: #000000;">3</span><span style="color: #000000;">);<br>    <br>     </span><span style="color: #008000;">//</span><span style="color: #008000;">fill the safearray</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>     CComVariant v </span><span style="color: #000000;">=</span><span style="color: #000000;"> pSafeArray.Detach();<br>}</span></div> 浣犲彲鑳戒細浠誨姟CComVariant浼氬瓨鍌╬SafeArray鐨勬寚閽堛傚彲鎯滐紝浣犻敊浜嗐?br>CComVariant浼氳皟鐢?:SafeArrayCopy 鏉ュ畬鎴愯祴鍊兼搷浣溿傝屼綘鐨刾SafeArray宸茬粡璋冪敤浜咲etach()鎿嶄綔錛岄偅涔堝畠閲岄潰鐨凷AFEARRAY灝卞彉鎴愪簡瀛ゅ効錛屾病鏈変漢鍘婚噴鏀懼畠浜嗐?br>閭d箞浣犲簲璇ユ庝箞鍐欎簡錛?br>浣犲彲浠ヨ繖涔堝啓錛?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;"> DoSomething()<br>{<br>     CComSafeArray</span><span style="color: #000000;"><</span><span style="color: #0000ff;">double</span><span style="color: #000000;">></span><span style="color: #000000;"> pSafeArray(</span><span style="color: #000000;">3</span><span style="color: #000000;">);<br>    <br>     </span><span style="color: #008000;">//</span><span style="color: #008000;">fill the safearray</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>     CComVariant v </span><span style="color: #000000;">=</span><span style="color: #000000;"> pSafeArray.m_psa;<br>}</span></div> 榪欐牱錛孋ComVariant浼氳皟鐢?:SafeArrayCopy 鏉ュ畬鎴愬鍒舵搷浣滐紝鑰孋ComSafeArray涔熶細淇濊瘉鍦ㄦ瀽鏋勭殑鏃跺欓噴鏀鵑噷闈㈢殑SAFEARRAY銆?br><br>浣跨敤涓婇潰涓変釜wrapper綾伙紝紜疄鍙互寰堟柟渚挎垜浠紪紼嬶紝涔熻兘閬垮厤寰堝memory leak銆備絾鏄紝浣跨敤浠栦滑鍚屾牱瑕佸皬蹇冿紝涓嶇劧錛屽悓鏍蜂細閫犳垚鎬ц兘鎹熷け錛屾垨鑰咃紝鏇寸碂緋曠殑錛屽唴瀛樻硠婕忋?img src ="http://www.shnenglu.com/netboy/aggbug/73846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/netboy/" target="_blank">鐜嬪媷鑹?/a> 2009-02-15 10:37 <a href="http://www.shnenglu.com/netboy/archive/2009/02/15/73846.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏍囧噯C++鐨勭被鍨嬭漿鎹㈢錛歴tatic_cast銆乨ynamic_cast銆乺einterpret_cast鍜宑onst_cast錛堣漿錛?/title><link>http://www.shnenglu.com/netboy/archive/2009/02/15/73843.html</link><dc:creator>鐜嬪媷鑹?/dc:creator><author>鐜嬪媷鑹?/author><pubDate>Sun, 15 Feb 2009 02:30:00 GMT</pubDate><guid>http://www.shnenglu.com/netboy/archive/2009/02/15/73843.html</guid><wfw:comment>http://www.shnenglu.com/netboy/comments/73843.html</wfw:comment><comments>http://www.shnenglu.com/netboy/archive/2009/02/15/73843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/netboy/comments/commentRss/73843.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/netboy/services/trackbacks/73843.html</trackback:ping><description><![CDATA[C 椋庢牸錛圕-style錛夊己鍒惰漿鍨嬪涓嬶細 <br>(T) exdivssion // cast exdivssion to be of type T <br>鍑芥暟椋庢牸錛團unction-style錛夊己鍒惰漿鍨嬩嬌鐢ㄨ繖鏍風殑璇硶錛?<br>T(exdivssion) // cast exdivssion to be of type T <br><br>榪欎袱縐嶅艦寮忎箣闂存病鏈夋湰璐ㄤ笂鐨勪笉鍚岋紝瀹冪函綺瑰氨鏄竴涓妸鎷彿鏀懼湪鍝殑闂銆傛垜鎶婅繖涓ょ褰㈠紡縐頒負鏃ч鏍鹼紙old-style錛夌殑寮哄埗杞瀷銆?br><br><br>浣跨敤鏍囧噯C++鐨勭被鍨嬭漿鎹㈢錛歴tatic_cast銆乨ynamic_cast銆乺einterdivt_cast銆佸拰const_cast銆?br>1. static_cast<br>鐢ㄦ硶錛歴tatic_cast < type-id > ( exdivssion ) <br>璇ヨ繍綆楃鎶奺xdivssion杞崲涓簍ype-id綾誨瀷錛屼絾娌℃湁榪愯鏃剁被鍨嬫鏌ユ潵淇濊瘉杞崲鐨勫畨鍏ㄦс傚畠涓昏鏈夊涓嬪嚑縐嶇敤娉曪細<br>鈶犵敤浜庣被灞傛緇撴瀯涓熀綾誨拰瀛愮被涔嬮棿鎸囬拡鎴栧紩鐢ㄧ殑杞崲銆?br>銆銆榪涜涓婅杞崲錛堟妸瀛愮被鐨勬寚閽堟垨寮曠敤杞崲鎴愬熀綾昏〃紺猴級鏄畨鍏ㄧ殑錛?br>銆銆榪涜涓嬭杞崲錛堟妸鍩虹被鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚瀛愮被琛ㄧず錛夋椂錛岀敱浜庢病鏈夊姩鎬佺被鍨嬫鏌ワ紝鎵浠ユ槸涓嶅畨鍏ㄧ殑銆?br>鈶$敤浜庡熀鏈暟鎹被鍨嬩箣闂寸殑杞崲錛屽鎶奿nt杞崲鎴恈har錛屾妸int杞崲鎴恊num銆傝繖縐嶈漿鎹㈢殑瀹夊叏鎬т篃瑕佸紑鍙戜漢鍛樻潵淇濊瘉銆?br>鈶㈡妸絀烘寚閽堣漿鎹㈡垚鐩爣綾誨瀷鐨勭┖鎸囬拡銆?br>鈶f妸浠諱綍綾誨瀷鐨勮〃杈懼紡杞崲鎴恦oid綾誨瀷銆?br>娉ㄦ剰錛歴tatic_cast涓嶈兘杞崲鎺塭xdivssion鐨刢onst銆乿olitale銆佹垨鑰卂_unaligned灞炴с?br><br>2. dynamic_cast<br>鐢ㄦ硶錛歞ynamic_cast < type-id > ( exdivssion )<br>璇ヨ繍綆楃鎶奺xdivssion杞崲鎴恡ype-id綾誨瀷鐨勫璞°俆ype-id蹇呴』鏄被鐨勬寚閽堛佺被鐨勫紩鐢ㄦ垨鑰卾oid *錛?br>濡傛灉type-id鏄被鎸囬拡綾誨瀷錛岄偅涔坋xdivssion涔熷繀欏繪槸涓涓寚閽堬紝濡傛灉type-id鏄竴涓紩鐢紝閭d箞exdivssion涔熷繀欏繪槸涓涓紩鐢ㄣ?br>dynamic_cast涓昏鐢ㄤ簬綾誨眰嬈¢棿鐨勪笂琛岃漿鎹㈠拰涓嬭杞崲錛岃繕鍙互鐢ㄤ簬綾諱箣闂寸殑浜ゅ弶杞崲銆?br>鍦ㄧ被灞傛闂磋繘琛屼笂琛岃漿鎹㈡椂錛宒ynamic_cast鍜宻tatic_cast鐨勬晥鏋滄槸涓鏍風殑錛?br>鍦ㄨ繘琛屼笅琛岃漿鎹㈡椂錛宒ynamic_cast鍏鋒湁綾誨瀷媯鏌ョ殑鍔熻兘錛屾瘮static_cast鏇村畨鍏ㄣ?br>class B{<br>public:<br>int m_iNum;<br>virtual void foo();<br>};<br>class D:public B{<br>public:<br>char *m_szName[100];<br>};<br>void func(B *pb){<br>D *pd1 = static_cast(pb);<br>D *pd2 = dynamic_cast(pb);<br>}<br>鍦ㄤ笂闈㈢殑浠g爜孌典腑錛屽鏋減b鎸囧悜涓涓狣綾誨瀷鐨勫璞★紝pd1鍜宲d2鏄竴鏍風殑錛屽茍涓斿榪欎袱涓寚閽堟墽琛孌綾誨瀷鐨勪換浣曟搷浣滈兘鏄畨鍏ㄧ殑錛?br>浣嗘槸錛屽鏋減b鎸囧悜鐨勬槸涓涓狟綾誨瀷鐨勫璞★紝閭d箞pd1灝嗘槸涓涓寚鍚戣瀵硅薄鐨勬寚閽堬紝瀵瑰畠榪涜D綾誨瀷鐨勬搷浣滃皢鏄笉瀹夊叏鐨勶紙濡傝闂甿_szName錛夛紝<br>鑰宲d2灝嗘槸涓涓┖鎸囬拡銆?br>鍙﹀瑕佹敞鎰忥細B瑕佹湁铏氬嚱鏁幫紝鍚﹀垯浼氱紪璇戝嚭閿欙紱static_cast鍒欐病鏈夎繖涓檺鍒躲?br>榪欐槸鐢變簬榪愯鏃剁被鍨嬫鏌ラ渶瑕佽繍琛屾椂綾誨瀷淇℃伅錛岃岃繖涓俊鎭瓨鍌ㄥ湪綾葷殑铏氬嚱鏁拌〃錛?br>鍏充簬铏氬嚱鏁拌〃鐨勬蹇碉紝璇︾粏鍙錛変腑錛屽彧鏈夊畾涔変簡铏氬嚱鏁扮殑綾繪墠鏈夎櫄鍑芥暟琛紝<br>娌℃湁瀹氫箟铏氬嚱鏁扮殑綾繪槸娌℃湁铏氬嚱鏁拌〃鐨勩?br>鍙﹀錛宒ynamic_cast榪樻敮鎸佷氦鍙夎漿鎹紙cross cast錛夈傚涓嬩唬鐮佹墍紺恒?br>class A{<br>public:<br>int m_iNum;<br>virtual void f(){}<br>};<br>class B:public A{<br>};<br>class D:public A{<br>};<br>void foo(){<br>B *pb = new B;<br>pb->m_iNum = 100;<br>D *pd1 = static_cast(pb); //compile error<br>D *pd2 = dynamic_cast(pb); //pd2 is NULL<br>delete pb;<br>}<br>鍦ㄥ嚱鏁癴oo涓紝浣跨敤static_cast榪涜杞崲鏄笉琚厑璁哥殑錛屽皢鍦ㄧ紪璇戞椂鍑洪敊錛涜屼嬌鐢?dynamic_cast鐨勮漿鎹㈠垯鏄厑璁哥殑錛岀粨鏋滄槸絀烘寚閽堛?br><br>3. reindivter_cast<br>鐢ㄦ硶錛歳eindivter_cast (exdivssion)<br>type-id蹇呴』鏄竴涓寚閽堛佸紩鐢ㄣ佺畻鏈被鍨嬨佸嚱鏁版寚閽堟垨鑰呮垚鍛樻寚閽堛?br>瀹冨彲浠ユ妸涓涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝涔熷彲浠ユ妸涓涓暣鏁拌漿鎹㈡垚涓涓寚閽堬紙鍏堟妸涓涓寚閽堣漿鎹㈡垚涓涓暣鏁幫紝<br>鍦ㄦ妸璇ユ暣鏁拌漿鎹㈡垚鍘熺被鍨嬬殑鎸囬拡錛岃繕鍙互寰楀埌鍘熷厛鐨勬寚閽堝鹼級銆?br>璇ヨ繍綆楃鐨勭敤娉曟瘮杈冨銆?br>4. const_cast <br>鐢ㄦ硶錛歝onst_cast (exdivssion)<br>璇ヨ繍綆楃鐢ㄦ潵淇敼綾誨瀷鐨刢onst鎴杤olatile灞炴с傞櫎浜哻onst 鎴杤olatile淇グ涔嬪錛?type_id鍜宔xdivssion鐨勭被鍨嬫槸涓鏍風殑銆?br>甯擱噺鎸囬拡琚漿鍖栨垚闈炲父閲忔寚閽堬紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱<br>甯擱噺寮曠敤琚漿鎹㈡垚闈炲父閲忓紩鐢紝騫朵笖浠嶇劧鎸囧悜鍘熸潵鐨勫璞★紱甯擱噺瀵硅薄琚漿鎹㈡垚闈炲父閲忓璞°?br>Voiatile鍜宑onst綾昏瘯銆備婦濡備笅涓渚嬶細<br>class B{<br>public:<br>int m_iNum;<br>}<br>void foo(){<br>const B b1;<br>b1.m_iNum = 100; //comile error<br>B b2 = const_cast(b1);<br>b2. m_iNum = 200; //fine<br>}<br>涓婇潰鐨勪唬鐮佺紪璇戞椂浼氭姤閿欙紝鍥犱負b1鏄竴涓父閲忓璞★紝涓嶈兘瀵瑰畠榪涜鏀瑰彉錛?br>浣跨敤const_cast鎶婂畠杞崲鎴愪竴涓父閲忓璞★紝灝卞彲浠ュ瀹冪殑鏁版嵁鎴愬憳浠繪剰鏀瑰彉銆傛敞鎰忥細b1鍜宐2鏄袱涓笉鍚岀殑瀵硅薄銆?br><br>== ===========================================<br>== dynamic_cast .vs. static_cast <br>== ===========================================<br><br>class B { ... }; <br>class D : public B { ... }; <br><br>void f(B* pb) <br>{ <br>D* pd1 = dynamic_cast(pb); <br>D* pd2 = static_cast(pb); <br>} <br><br><br>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. <br><br><br>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’s assertion that pb points to an object of type D and simply returns a pointer to that supposed D object. <br><br><br>鍗砫ynamic_cast鍙敤浜庣戶鎵夸綋緋諱腑鐨勫悜涓嬭漿鍨嬶紝鍗沖皢鍩虹被鎸囬拡杞崲涓烘淳鐢熺被鎸囬拡錛屾瘮static_cast鏇翠弗鏍兼洿瀹夊叏銆俤ynamic_cast鍦ㄦ墽琛屾晥鐜囦笂姣攕tatic_cast瑕佸樊涓浜涳紝浣唖tatic_cast鍦ㄦ洿瀹戒笂鑼冨洿鍐呭彲浠ュ畬鎴愭槧灝勶紝榪欑涓嶅姞闄愬埗鐨勬槧灝勪即闅忕潃涓嶅畨鍏ㄦс俿tatic_cast瑕嗙洊鐨勫彉鎹㈢被鍨嬮櫎綾誨眰嬈$殑闈欐佸鑸互澶栵紝榪樺寘鎷棤鏄犲皠鍙樻崲銆佺獎鍖栧彉鎹?榪欑鍙樻崲浼氬鑷村璞″垏鐗?涓㈠け淇℃伅)銆佺敤VOID*鐨勫己鍒跺彉鎹€侀殣寮忕被鍨嬪彉鎹㈢瓑... <br><br><br>== ===========================================<br>== static_cast .vs. reinterdivt_cast <br>== ================================================<br><br><br>reinterdivt_cast鏄負浜嗘槧灝勫埌涓涓畬鍏ㄤ笉鍚岀被鍨嬬殑鎰忔濓紝榪欎釜鍏抽敭璇嶅湪鎴戜滑闇瑕佹妸綾誨瀷鏄犲皠鍥炲師鏈夌被鍨嬫椂鐢ㄥ埌瀹冦傛垜浠槧灝勫埌鐨勭被鍨嬩粎浠呮槸涓轟簡鏁呭紕鐜勮櫄鍜屽叾浠栫洰鐨勶紝榪欐槸鎵鏈夋槧灝勪腑鏈鍗遍櫓鐨勩?榪欏彞璇濇槸C++緙栫▼鎬濇兂涓殑鍘熻瘽) <br>static_cast 鍜?reinterdivt_cast 鎿嶄綔絎︿慨鏀逛簡鎿嶄綔鏁扮被鍨嬨傚畠浠笉鏄簰閫嗙殑錛?static_cast 鍦ㄧ紪璇戞椂浣跨敤綾誨瀷淇℃伅鎵ц杞崲錛屽湪杞崲鎵ц蹇呰鐨勬嫻?璇稿鎸囬拡瓚婄晫璁$畻, 綾誨瀷媯鏌?. 鍏舵搷浣滄暟鐩稿鏄畨鍏ㄧ殑銆傚彟涓鏂歸潰錛況einterdivt_cast 浠呬粎鏄噸鏂拌В閲婁簡緇欏嚭鐨勫璞$殑姣旂壒妯″瀷鑰屾病鏈夎繘琛屼簩榪涘埗杞崲錛?渚嬪瓙濡備笅錛?br><br><br>int n=9; double d=static_cast < double > (n); <br><br><br>涓婇潰鐨勪緥瀛愪腑, 鎴戜滑灝嗕竴涓彉閲忎粠 int 杞崲鍒?double銆?榪欎簺綾誨瀷鐨勪簩榪涘埗琛ㄨ揪寮忔槸涓嶅悓鐨勩?瑕佸皢鏁存暟 9 杞崲鍒?鍙岀簿搴︽暣鏁?9錛宻tatic_cast 闇瑕佹紜湴涓哄弻綺懼害鏁存暟 d 琛ヨ凍姣旂壒浣嶃傚叾緇撴灉涓?9.0銆傝宺einterdivt_cast 鐨勮涓哄嵈涓嶅悓: <br><br><br>int n=9; <br>double d=reinterdivt_cast (n);<br><br>榪欐, 緇撴灉鏈夋墍涓嶅悓. 鍦ㄨ繘琛岃綆椾互鍚? d 鍖呭惈鏃犵敤鍊? 榪欐槸鍥犱負 reinterdivt_cast 浠呬粎鏄鍒?n 鐨勬瘮鐗逛綅鍒?d, 娌℃湁榪涜蹇呰鐨勫垎鏋? <br><br><br>鍥犳, 浣犻渶瑕佽皚鎱庝嬌鐢?reinterdivt_cast.  <br><br><br><img src ="http://www.shnenglu.com/netboy/aggbug/73843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/netboy/" target="_blank">鐜嬪媷鑹?/a> 2009-02-15 10:30 <a href="http://www.shnenglu.com/netboy/archive/2009/02/15/73843.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬sizeof()鐨勭畝鍗曡В鏋愶紙杞級http://www.shnenglu.com/netboy/archive/2009/02/15/73842.html鐜嬪媷鑹?/dc:creator>鐜嬪媷鑹?/author>Sun, 15 Feb 2009 02:29:00 GMThttp://www.shnenglu.com/netboy/archive/2009/02/15/73842.htmlhttp://www.shnenglu.com/netboy/comments/73842.htmlhttp://www.shnenglu.com/netboy/archive/2009/02/15/73842.html#Feedback0http://www.shnenglu.com/netboy/comments/commentRss/73842.htmlhttp://www.shnenglu.com/netboy/services/trackbacks/73842.html
int a=256;

printf("%d\n", sizeof(++a));

printf("%d\n", a);

閭d箞鍒板簳鎵撳嵃鐨勬槸澶氬皯鍛紵

搴旇鏄?鍜?56錛屾垜鎯崇涓涓瓟妗堝ぇ瀹跺簲璇ュ凡緇忔病鏈夐棶棰樹簡錛屼絾鏄負浠涔堝湪++a浠ュ悗錛宎鐨勬暟鍊艱繕鏄病鏈夊彂鐢熷彉鍖栧憿錛熷洜涓簊izeof錛堬級鏄竴涓繍綆楃錛屽湪鍏朵腑鐨勬墍鏈夌殑榪愮畻閮芥槸鏃犳晥鐨勶紝鎵浠?+a鏍規湰灝辨病鏈夎繍琛屻?br>
涓婇潰鐨勪竴涓緥瀛愭彁閱掓垜浠紝铏界劧sizeof鐪嬭繖綆鍗曪紝浣嗘槸鍏朵腑榪樻槸鏈夊緢澶氱殑闂鍊煎緱璁ㄨ鐨勶紝鍛靛懙銆?br>
涓銆乻izeof鐨勬蹇點
銆銆sizeof鏄疌璇█鐨勪竴縐嶅崟鐩搷浣滅錛屽C璇█鐨勫叾浠栨搷浣滅++銆?-絳夈傚畠騫朵笉鏄嚱鏁般俿izeof鎿嶄綔絎︿互瀛楄妭褰㈠紡緇欏嚭浜嗗叾鎿嶄綔鏁扮殑瀛樺偍澶у皬銆傛搷浣滄暟鍙互鏄竴涓〃杈懼紡鎴栨嫭鍦ㄦ嫭鍙峰唴鐨勭被鍨嬪悕銆傛搷浣滄暟鐨勫瓨鍌ㄥぇ灝忕敱鎿嶄綔鏁扮殑綾誨瀷鍐沖畾銆傘

浜屻乻izeof鐨勪嬌鐢ㄦ柟娉曘
銆銆1銆佺敤浜庢暟鎹被鍨嬨

銆銆sizeof浣跨敤褰㈠紡錛歴izeof錛坱ype錛夈

銆銆鏁版嵁綾誨瀷蹇呴』鐢ㄦ嫭鍙鋒嫭浣忋傚sizeof錛坕nt錛夈傘

銆銆2銆佺敤浜庡彉閲忋

銆銆sizeof浣跨敤褰㈠紡錛歴izeof錛坴ar_name錛夋垨sizeof銆var_name銆

銆銆鍙橀噺鍚嶅彲浠ヤ笉鐢ㄦ嫭鍙鋒嫭浣忋傚sizeof銆(var_name)錛宻izeof銆var_name絳夐兘鏄紜艦寮忋傚甫鎷彿鐨勭敤娉曟洿鏅亶錛屽ぇ澶氭暟紼嬪簭鍛橀噰鐢ㄨ繖縐嶅艦寮忋傘

銆銆娉ㄦ剰錛歴izeof鎿嶄綔絎︿笉鑳界敤浜庡嚱鏁扮被鍨嬶紝涓嶅畬鍏ㄧ被鍨嬫垨浣嶅瓧孌點備笉瀹屽叏綾誨瀷鎸囧叿鏈夋湭鐭ュ瓨鍌ㄥぇ灝忕殑鏁版嵁綾誨瀷錛屽鏈煡瀛樺偍澶у皬鐨勬暟緇勭被鍨嬨佹湭鐭ュ唴瀹圭殑緇撴瀯鎴栬仈鍚堢被鍨嬨乿oid綾誨瀷絳夈傘

銆銆濡俿izeof(max)鑻ユ鏃跺彉閲弇ax瀹氫箟涓篿nt銆max(),sizeof(char_v)銆鑻ユ鏃禼har_v瀹氫箟涓篶har銆char_v銆[MAX]涓擬AX鏈煡錛宻izeof(void)閮戒笉鏄紜艦寮忋傘

涓夈乻izeof鐨勭粨鏋溿
銆銆sizeof鎿嶄綔絎︾殑緇撴灉綾誨瀷鏄痵ize_t錛屽畠鍦ㄥご鏂囦歡

涓璽ypedef涓簎nsigned銆int綾誨瀷銆傝綾誨瀷淇濊瘉鑳藉綰沖疄鐜版墍寤虹珛鐨勬渶澶у璞$殑瀛楄妭澶у皬銆傘

銆銆1銆佽嫢鎿嶄綔鏁板叿鏈夌被鍨媍har銆乽nsigned銆char鎴杝igned銆char錛屽叾緇撴灉絳変簬1銆傘

銆銆ANSI銆C姝e紡瑙勫畾瀛楃綾誨瀷涓?瀛楄妭銆傘

2銆乮nt銆乽nsigned銆int銆銆乻hort銆int銆乽nsigned銆short銆銆乴ong銆int銆銆乽nsigned銆long銆銆?nbsp; float銆乨ouble銆乴ong銆double綾誨瀷鐨剆izeof銆鍦ˋNSI銆C涓病鏈夊叿浣撹瀹氾紝澶у皬渚濊禆浜庡疄鐜幫紝涓鑸彲鑳藉垎鍒負2銆?銆?銆?2銆?4銆?銆?銆?銆?0銆傘

銆銆3銆佸綋鎿嶄綔鏁版槸鎸囬拡鏃訛紝sizeof渚濊禆浜庣紪璇戝櫒銆備緥濡侻icrosoft銆C/C++7.0涓紝near綾繪寚閽堝瓧鑺傛暟涓?錛宖ar銆乭uge綾繪寚閽堝瓧鑺傛暟涓?銆備竴鑸琔nix鐨勬寚閽堝瓧鑺傛暟涓?銆傘

銆銆4銆佸綋鎿嶄綔鏁板叿鏈夋暟緇勭被鍨嬫椂錛屽叾緇撴灉鏄暟緇勭殑鎬誨瓧鑺傛暟銆傘

銆銆5銆佽仈鍚堢被鍨嬫搷浣滄暟鐨剆izeof鏄叾鏈澶у瓧鑺傛垚鍛樼殑瀛楄妭鏁般傜粨鏋勭被鍨嬫搷浣滄暟鐨剆izeof鏄繖縐嶇被鍨嬪璞$殑鎬誨瓧鑺傛暟錛屽寘鎷換浣曞灚琛ュ湪鍐呫傘

銆銆璁╂垜浠湅濡備笅緇撴瀯錛氥

銆銆struct銆{char銆b;銆double銆x;}銆a;銆

銆銆鍦ㄦ煇浜涙満鍣ㄤ笂sizeof錛坅錛?12錛岃屼竴鑸瑂izeof錛坈har錛?銆sizeof錛坉ouble錛?9銆傘

銆銆榪欐槸鍥犱負緙栬瘧鍣ㄥ湪鑰冭檻瀵歸綈闂鏃訛紝鍦ㄧ粨鏋勪腑鎻掑叆絀轟綅浠ユ帶鍒跺悇鎴愬憳瀵硅薄鐨勫湴鍧瀵歸綈銆傚double綾誨瀷鐨勭粨鏋勬垚鍛榵瑕佹斁鍦ㄨ4鏁撮櫎鐨勫湴鍧銆傘

銆銆6銆佸鏋滄搷浣滄暟鏄嚱鏁頒腑鐨勬暟緇勫艦鍙傛垨鍑芥暟綾誨瀷鐨勫艦鍙傦紝sizeof緇欏嚭鍏舵寚閽堢殑澶у皬銆傘

鍥涖乻izeof涓庡叾浠栨搷浣滅鐨勫叧緋匯
銆銆sizeof鐨勪紭鍏堢駭涓?綰э紝姣?銆?絳?綰ц繍綆楃浼樺厛綰ч珮銆傚畠鍙互涓庡叾浠栨搷浣滅涓璧風粍鎴愯〃杈懼紡銆傚i*sizeof錛坕nt錛夛紱鍏朵腑i涓篿nt綾誨瀷鍙橀噺銆傘

浜斻乻izeof鐨勪富瑕佺敤閫斻
銆銆1銆乻izeof鎿嶄綔絎︾殑涓涓富瑕佺敤閫旀槸涓庡瓨鍌ㄥ垎閰嶅拰I/O緋葷粺閭f牱鐨勪緥紼嬭繘琛岄氫俊銆備緥濡傦細銆

銆銆void銆*malloc錛坰ize_t銆size錛?銆

銆銆size_t銆fread(void銆*銆ptr,size_t銆size,size_t銆nmemb,FILE銆*銆stream)銆傘

銆銆2銆乻izeof鐨勫彟涓涓殑涓昏鐢ㄩ旀槸璁$畻鏁扮粍涓厓绱犵殑涓暟銆備緥濡傦細銆

銆銆void銆*銆memset錛坴oid銆*銆s,int銆c,sizeof(s)錛夈傘

鍏佸緩璁
銆銆鐢變簬鎿嶄綔鏁扮殑瀛楄妭鏁板湪瀹炵幇鏃跺彲鑳藉嚭鐜板彉鍖栵紝寤鴻鍦ㄦ秹鍙婂埌鎿嶄綔鏁板瓧鑺傚ぇ灝忔椂鐢╯izeof鏉ヤ唬鏇垮父閲忚綆椼?br>

=============================================================
鏈枃涓昏鍖呮嫭浜屼釜閮ㄥ垎錛岀涓閮ㄥ垎閲嶇偣浠嬬粛鍦╒C涓紝鎬庝箞鏍烽噰鐢╯izeof鏉ユ眰緇撴瀯鐨勫ぇ灝忥紝浠ュ強瀹規槗鍑虹幇鐨勯棶棰橈紝騫剁粰鍑鴻В鍐抽棶棰樼殑鏂規硶錛岀浜岄儴鍒嗘葷粨鍑篤C涓璼izeof鐨勪富瑕佺敤娉曘?

1銆?sizeof搴旂敤鍦ㄧ粨鏋勪笂鐨勬儏鍐?

璇風湅涓嬮潰鐨勭粨鏋勶細

struct MyStruct

{

double dda1;

char dda;

int type

};

瀵圭粨鏋凪yStruct閲囩敤sizeof浼氬嚭鐜頒粈涔堢粨鏋滃憿錛焥izeof(MyStruct)涓哄灝戝憿錛熶篃璁鎬綘浼氳繖鏍鋒眰錛?

sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13

浣嗘槸褰撳湪VC涓祴璇曚笂闈㈢粨鏋勭殑澶у皬鏃訛紝浣犱細鍙戠幇sizeof(MyStruct)涓?6銆備綘鐭ラ亾涓轟粈涔堝湪VC涓細寰楀嚭榪欐牱涓涓粨鏋滃悧錛?

鍏跺疄錛岃繖鏄疺C瀵瑰彉閲忓瓨鍌ㄧ殑涓涓壒孌婂鐞嗐備負浜嗘彁楂楥PU鐨勫瓨鍌ㄩ熷害錛孷C瀵逛竴浜涘彉閲忕殑璧峰鍦板潃鍋氫簡"瀵歸綈"澶勭悊銆傚湪榛樿鎯呭喌涓嬶紝VC瑙勫畾鍚勬垚鍛樺彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺蹇呴』涓鴻鍙橀噺鐨勭被鍨嬫墍鍗犵敤鐨勫瓧鑺傛暟鐨勫嶆暟銆備笅闈㈠垪鍑哄父鐢ㄧ被鍨嬬殑瀵歸綈鏂瑰紡(vc6.0,32浣嶇郴緇?銆?

綾誨瀷
瀵歸綈鏂瑰紡錛堝彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺錛?

Char
鍋忕Щ閲忓繀欏諱負sizeof(char)鍗?鐨勫嶆暟

int
鍋忕Щ閲忓繀欏諱負sizeof(int)鍗?鐨勫嶆暟

float
鍋忕Щ閲忓繀欏諱負sizeof(float)鍗?鐨勫嶆暟

double
鍋忕Щ閲忓繀欏諱負sizeof(double)鍗?鐨勫嶆暟

Short
鍋忕Щ閲忓繀欏諱負sizeof(short)鍗?鐨勫嶆暟


鍚勬垚鍛樺彉閲忓湪瀛樻斁鐨勬椂鍊欐牴鎹湪緇撴瀯涓嚭鐜扮殑欏哄簭渚濇鐢寵絀洪棿錛屽悓鏃舵寜鐓т笂闈㈢殑瀵歸綈鏂瑰紡璋冩暣浣嶇疆錛岀┖緙虹殑瀛楄妭VC浼氳嚜鍔ㄥ~鍏呫傚悓鏃禫C涓轟簡紜繚緇撴瀯鐨勫ぇ灝忎負緇撴瀯鐨勫瓧鑺傝竟鐣屾暟錛堝嵆璇ョ粨鏋勪腑鍗犵敤鏈澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛夌殑鍊嶆暟錛屾墍浠ュ湪涓烘渶鍚庝竴涓垚鍛樺彉閲忕敵璇風┖闂村悗錛岃繕浼氭牴鎹渶瑕佽嚜鍔ㄥ~鍏呯┖緙虹殑瀛楄妭銆?

涓嬮潰鐢ㄥ墠闈㈢殑渚嬪瓙鏉ヨ鏄嶸C鍒板簳鎬庝箞鏍鋒潵瀛樻斁緇撴瀯鐨勩?

struct MyStruct

{

double dda1;

char dda;

int type

}錛?

涓轟笂闈㈢殑緇撴瀯鍒嗛厤絀洪棿鐨勬椂鍊欙紝VC鏍規嵁鎴愬憳鍙橀噺鍑虹幇鐨勯『搴忓拰瀵歸綈鏂瑰紡錛屽厛涓虹涓涓垚鍛榙da1鍒嗛厤絀洪棿錛屽叾璧峰鍦板潃璺熺粨鏋勭殑璧峰鍦板潃鐩稿悓錛堝垰濂藉亸縐婚噺0鍒氬ソ涓簊izeof(double)鐨勫嶆暟錛夛紝璇ユ垚鍛樺彉閲忓崰鐢╯izeof(double)=8涓瓧鑺傦紱鎺ヤ笅鏉ヤ負絎簩涓垚鍛榙da鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屾槸sizeof(char)鐨勫嶆暟錛屾墍浠ユ妸dda瀛樻斁鍦ㄥ亸縐婚噺涓?鐨勫湴鏂規弧瓚沖榻愭柟寮忥紝璇ユ垚鍛樺彉閲忓崰鐢?nbsp; sizeof(char)=1涓瓧鑺傦紱鎺ヤ笅鏉ヤ負絎笁涓垚鍛榯ype鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屼笉鏄?sizeof (int)=4鐨勫嶆暟錛屼負浜嗘弧瓚沖榻愭柟寮忓鍋忕Щ閲忕殑綰︽潫闂錛孷C鑷姩濉厖3涓瓧鑺傦紙榪欎笁涓瓧鑺傛病鏈夋斁浠涔堜笢瑗匡級錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?2錛屽垰濂芥槸sizeof(int)=4鐨勫嶆暟錛屾墍浠ユ妸type瀛樻斁鍦ㄥ亸縐婚噺涓?2鐨勫湴鏂癸紝璇ユ垚鍛樺彉閲忓崰鐢╯izeof (int)=4涓瓧鑺傦紱榪欐椂鏁翠釜緇撴瀯鐨勬垚鍛樺彉閲忓凡緇忛兘鍒嗛厤浜嗙┖闂達紝鎬葷殑鍗犵敤鐨勭┖闂村ぇ灝忎負錛?+1+3+4=16錛屽垰濂戒負緇撴瀯鐨勫瓧鑺傝竟鐣屾暟錛堝嵆緇撴瀯涓崰鐢ㄦ渶澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟sizeof(double)=8錛夌殑鍊嶆暟錛屾墍浠ユ病鏈夌┖緙虹殑瀛楄妭闇瑕佸~鍏呫傛墍浠ユ暣涓粨鏋勭殑澶у皬涓猴細sizeof (MyStruct)=8+1+ 3+4=16錛屽叾涓湁3涓瓧鑺傛槸VC鑷姩濉厖鐨勶紝娌℃湁鏀句換浣曟湁鎰忎箟鐨勪笢瑗褲?

涓嬮潰鍐嶄婦涓緥瀛愶紝浜ゆ崲涓涓嬩笂闈㈢殑MyStruct鐨勬垚鍛樺彉閲忕殑浣嶇疆錛屼嬌瀹冨彉鎴愪笅闈㈢殑鎯呭喌錛?

struct MyStruct

{

char dda;

double dda1;   

int type

}錛?

榪欎釜緇撴瀯鍗犵敤鐨勭┖闂翠負澶氬ぇ鍛紵鍦╒C6.0鐜涓嬶紝鍙互寰楀埌sizeof(MyStruc)涓?4銆傜粨鍚堜笂闈㈡彁鍒扮殑鍒嗛厤絀洪棿鐨勪竴浜涘師鍒欙紝鍒嗘瀽涓媀C鎬庝箞鏍蜂負涓婇潰鐨勭粨鏋勫垎閰嶇┖闂寸殑銆傦紙綆鍗曡鏄庯級

struct MyStruct

{

  char dda;//鍋忕Щ閲忎負0錛屾弧瓚沖榻愭柟寮忥紝dda鍗犵敤1涓瓧鑺傦紱

double dda1;//涓嬩竴涓彲鐢ㄧ殑鍦板潃鐨勫亸縐婚噺涓?錛屼笉鏄痵izeof(double)=8

             //鐨勫嶆暟錛岄渶瑕佽ˉ瓚?涓瓧鑺傛墠鑳戒嬌鍋忕Щ閲忓彉涓?錛堟弧瓚沖榻?

             //鏂瑰紡錛夛紝鍥犳VC鑷姩濉厖7涓瓧鑺傦紝dda1瀛樻斁鍦ㄥ亸縐婚噺涓?

             //鐨勫湴鍧涓婏紝瀹冨崰鐢?涓瓧鑺傘?

int type錛?/涓嬩竴涓彲鐢ㄧ殑鍦板潃鐨勫亸縐婚噺涓?6錛屾槸sizeof(int)=4鐨勫?

           //鏁幫紝婊¤凍int鐨勫榻愭柟寮忥紝鎵浠ヤ笉闇瑕乂C鑷姩濉厖錛宼ype瀛?

           //鏀懼湪鍋忕Щ閲忎負16鐨勫湴鍧涓婏紝瀹冨崰鐢?涓瓧鑺傘?

}錛?/鎵鏈夋垚鍛樺彉閲忛兘鍒嗛厤浜嗙┖闂達紝絀洪棿鎬葷殑澶у皬涓?+7+8+4=20錛屼笉鏄粨鏋?

   //鐨勮妭杈圭晫鏁幫紙鍗崇粨鏋勪腑鍗犵敤鏈澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟sizeof

   //(double)=8錛夌殑鍊嶆暟錛屾墍浠ラ渶瑕佸~鍏?涓瓧鑺傦紝浠ユ弧瓚崇粨鏋勭殑澶у皬涓?

   //sizeof(double)=8鐨勫嶆暟銆?


鎵浠ヨ緇撴瀯鎬葷殑澶у皬涓猴細sizeof(MyStruc)涓?+7+8+4+4=24銆傚叾涓葷殑鏈?+4=11涓瓧鑺傛槸VC鑷姩濉厖鐨勶紝娌℃湁鏀句換浣曟湁鎰忎箟鐨勪笢瑗褲?


VC瀵圭粨鏋勭殑瀛樺偍鐨勭壒孌婂鐞嗙‘瀹炴彁楂楥PU瀛樺偍鍙橀噺鐨勯熷害錛屼絾鏄湁鏃跺欎篃甯︽潵浜嗕竴浜涢夯鐑︼紝鎴戜滑涔熷睆钄芥帀鍙橀噺榛樿鐨勫榻愭柟寮忥紝鑷繁鍙互璁懼畾鍙橀噺鐨勫榻愭柟寮忋?

#pragma pack(n)
VC  涓彁渚涗簡#pragma pack(n)鏉ヨ瀹氬彉閲忎互n瀛楄妭瀵歸綈鏂瑰紡銆俷瀛楄妭瀵歸綈灝辨槸璇村彉閲忓瓨鏀劇殑璧峰鍦板潃鐨勫亸縐婚噺鏈変袱縐嶆儏鍐碉細絎竴銆佸鏋渘澶т簬絳変簬璇ュ彉閲忔墍鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堝亸縐婚噺蹇呴』婊¤凍榛樿鐨勫榻愭柟寮忥紝絎簩銆佸鏋渘灝忎簬璇ュ彉閲忕殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堝亸縐婚噺涓簄鐨勫嶆暟錛屼笉鐢ㄦ弧瓚抽粯璁ょ殑瀵歸綈鏂瑰紡銆傜粨鏋勭殑鎬誨ぇ灝忎篃鏈変釜綰︽潫鏉′歡錛屽垎涓嬮潰涓ょ鎯呭喌錛氬鏋渘澶т簬鎵鏈夋垚鍛樺彉閲忕被鍨嬫墍鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堢粨鏋勭殑鎬誨ぇ灝忓繀欏諱負鍗犵敤絀洪棿鏈澶х殑鍙橀噺鍗犵敤鐨勭┖闂存暟鐨勫嶆暟錛?nbsp;  

鍚﹀垯蹇呴』涓簄鐨勫嶆暟銆備笅闈婦渚嬭鏄庡叾鐢ㄦ硶銆?

#pragma pack(push) //淇濆瓨瀵歸綈鐘舵?

#pragma pack(4)//璁懼畾涓?瀛楄妭瀵歸綈

struct test

{

  char m1;

  double m4;

  int  m3;

};

#pragma pack(pop)//鎭㈠瀵歸綈鐘舵?

浠ヤ笂緇撴瀯鐨勫ぇ灝忎負16錛屼笅闈㈠垎鏋愬叾瀛樺偍鎯呭喌錛岄鍏堜負m1鍒嗛厤絀洪棿錛屽叾鍋忕Щ閲忎負0錛屾弧瓚蟲垜浠嚜宸辮瀹氱殑瀵歸綈鏂瑰紡錛?瀛楄妭瀵歸綈錛夛紝m1鍗犵敤1涓瓧鑺傘傛帴鐫寮濮嬩負  m4鍒嗛厤絀洪棿錛岃繖鏃跺叾鍋忕Щ閲忎負1錛岄渶瑕佽ˉ瓚?涓瓧鑺傦紝榪欐牱浣垮亸縐婚噺婊¤凍涓簄=4鐨勫嶆暟錛堝洜涓簊izeof(double)澶т簬n錛?m4鍗犵敤8涓瓧鑺傘傛帴鐫涓簃3鍒嗛厤絀洪棿錛岃繖鏃跺叾鍋忕Щ閲忎負12錛屾弧瓚充負4鐨勫嶆暟錛宮3鍗犵敤4涓瓧鑺傘傝繖鏃跺凡緇忎負鎵鏈夋垚鍛樺彉閲忓垎閰嶄簡絀洪棿錛屽叡鍒嗛厤浜?6涓瓧鑺傦紝婊¤凍涓簄鐨勫嶆暟銆傚鏋滄妸涓婇潰鐨?pragma pack(4)鏀逛負#pragma pack(16)錛岄偅涔堟垜浠彲浠ュ緱鍒扮粨鏋勭殑澶у皬涓?4銆傦紙璇瘋鑰呰嚜宸卞垎鏋愶級

2銆?sizeof鐢ㄦ硶鎬葷粨

鍦╒C涓紝sizeof鏈夌潃璁稿鐨勭敤娉曪紝鑰屼笖寰堝鏄撳紩璧蜂竴浜涢敊璇備笅闈㈡牴鎹畇izeof鍚庨潰鐨勫弬鏁板sizeof鐨勭敤娉曞仛涓葷粨銆?

A錛?nbsp; 鍙傛暟涓烘暟鎹被鍨嬫垨鑰呬負涓鑸彉閲忋備緥濡俿izeof(int),sizeof(long)絳夌瓑銆傝繖縐嶆儏鍐佃娉ㄦ剰鐨勬槸涓嶅悓緋葷粺緋葷粺鎴栬呬笉鍚岀紪璇戝櫒寰楀埌鐨勭粨鏋滃彲鑳芥槸涓嶅悓鐨勩備緥濡俰nt綾誨瀷鍦?6浣嶇郴緇熶腑鍗?涓瓧鑺傦紝鍦?2浣嶇郴緇熶腑鍗?涓瓧鑺傘?

B錛?nbsp; 鍙傛暟涓烘暟緇勬垨鎸囬拡銆備笅闈婦渚嬭鏄?

int a[50];  //sizeof(a)=4*50=200; 姹傛暟緇勬墍鍗犵殑絀洪棿澶у皬

int *a=new int[50];// sizeof(a)=4; a涓轟竴涓寚閽堬紝sizeof(a)鏄眰鎸囬拡

                   //鐨勫ぇ灝?鍦?2浣嶇郴緇熶腑錛屽綋鐒舵槸鍗?涓瓧鑺傘?

C錛?nbsp; 鍙傛暟涓虹粨鏋勬垨綾匯係izeof搴旂敤鍦ㄧ被鍜岀粨鏋勭殑澶勭悊鎯呭喌鏄浉鍚岀殑銆備絾鏈変袱鐐歸渶瑕佹敞鎰忥紝絎竴銆佺粨鏋勬垨鑰呯被涓殑闈欐佹垚鍛樹笉瀵圭粨鏋勬垨鑰呯被鐨勫ぇ灝忎駭鐢熷獎鍝嶏紝鍥犱負闈欐佸彉閲忕殑瀛樺偍浣嶇疆涓庣粨鏋勬垨鑰呯被鐨勫疄渚嬪湴鍧鏃犲叧銆?

絎簩銆佹病鏈夋垚鍛樺彉閲忕殑緇撴瀯鎴栫被鐨勫ぇ灝忎負1錛屽洜涓哄繀欏諱繚璇佺粨鏋勬垨綾葷殑姣忎竴

涓疄渚嬪湪鍐呭瓨涓兘鏈夊敮涓鐨勫湴鍧銆?

涓嬮潰涓句緥璇存槑錛?

Class Test{int a;static double c};//sizeof(Test)=4.

Test *s;//sizeof(s)=4,s涓轟竴涓寚閽堛?

Class test1{ };//sizeof(test1)=1;

D錛?nbsp; 鍙傛暟涓哄叾浠栥備笅闈婦渚嬭鏄庛?

   int func(char s[5]);

   {

     cout<<sizeof(s);//榪欓噷灝嗚緭鍑?錛屾湰鏉涓轟竴涓暟緇勶紝浣嗙敱浜庡仛涓哄嚱

                     //鏁扮殑鍙傛暟鍦ㄤ紶閫掔殑鏃跺欑郴緇熷鐞嗕負涓涓寚閽堬紝鎵

                     //浠izeof(s)瀹為檯涓婁負姹傛寚閽堢殑澶у皬銆?

     return 1;

}

sizeof(func("1234"))=4//鍥犱負func鐨勮繑鍥炵被鍨嬩負int錛屾墍浠ョ浉褰撲簬

                     //姹俿izeof(int).


浠ヤ笂涓簊izeof鐨勫熀鏈敤娉曪紝鍦ㄥ疄闄呯殑浣跨敤涓娉ㄦ剰鍒嗘瀽VC鐨勫垎閰嶅彉閲忕殑鍒嗛厤絳栫暐錛岃繖鏍風殑璇濆彲浠ラ伩鍏嶄竴浜涢敊璇?img src ="http://www.shnenglu.com/netboy/aggbug/73842.html" width = "1" height = "1" />

]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美日韩视频在线观看| 久久久综合香蕉尹人综合网| 亚洲天堂av在线免费| 亚洲国产美女精品久久久久∴| 午夜精品一区二区三区在线播放| 亚洲一区免费在线观看| 国产精品久久久久77777| 欧美一区二区三区喷汁尤物| 性色av一区二区三区在线观看 | 日韩一级不卡| 欧美日韩一区二区三区四区在线观看 | 欧美日韩免费观看一区=区三区| 一本色道久久加勒比精品| 亚洲精品老司机| 欧美日韩精品在线视频| 欧美一区二区三区四区在线观看地址 | 狂野欧美一区| 亚洲午夜激情在线| 久久riav二区三区| 亚洲免费观看在线视频| 一区二区免费在线观看| 激情欧美一区二区三区| 亚洲精品视频在线观看免费| 国产欧美另类| 亚洲福利视频专区| 国产精品一卡二| 欧美激情影院| 亚洲国产精品久久久久| 亚洲成人在线视频播放| 91久久精品一区| 国产精品日韩欧美大师| 牛人盗摄一区二区三区视频| 欧美日韩免费观看一区二区三区| 久久精品视频一| 欧美日本高清| 欧美~级网站不卡| 国产精品美女www爽爽爽视频| 欧美成人精品高清在线播放| 国产精品久久精品日日| 欧美大片一区二区三区| 国产日韩欧美在线播放| 日韩视频在线观看国产| 亚洲第一主播视频| 欧美一级网站| 亚洲综合三区| 欧美黄色精品| 欧美大色视频| 黄色成人免费网站| 亚洲女人天堂av| 亚洲视频免费| 欧美日韩国产bt| 欧美国产专区| 亚洲成人在线视频播放| 久久精品国产精品亚洲精品| 小辣椒精品导航| 欧美视频网站| 亚洲精品久久久久| 亚洲精品美女在线观看| 免费观看一区| 亚洲国产精品一区二区www| 在线观看亚洲视频| 久久成人精品无人区| 午夜电影亚洲| 国产噜噜噜噜噜久久久久久久久| 一区二区三区不卡视频在线观看| 一本色道久久综合亚洲精品按摩 | 国产在线精品自拍| 久久精品国产久精国产思思| 久久午夜电影网| 国内精品久久久久影院色 | 亚洲视频在线观看三级| 亚洲午夜国产成人av电影男同| 欧美日韩国产综合一区二区| 亚洲乱码国产乱码精品精天堂| 中文无字幕一区二区三区| 欧美日韩综合久久| 亚洲淫性视频| 久久一二三四| 日韩视频一区二区在线观看 | 一区二区免费看| 欧美日韩伦理在线免费| 亚洲无线一线二线三线区别av| 亚洲欧美日韩视频一区| 韩国一区二区三区美女美女秀| 久久男女视频| 亚洲一区成人| 亚洲高清在线播放| 欧美多人爱爱视频网站| 99国产精品久久久久久久久久| 亚洲一区二区三区视频播放| 国产乱码精品一区二区三区不卡| 久久爱另类一区二区小说| 欧美韩国在线| 亚洲欧美高清| 亚洲国产精品嫩草影院| 国产精品久久91| 久久精品一区四区| 亚洲精品免费在线| 久久精品国产久精国产爱| 亚洲韩国日本中文字幕| 国产精品久久中文| 久久久五月天| 夜夜爽av福利精品导航| 蜜桃久久av一区| 亚洲一区二区在线看| 亚洲电影激情视频网站| 国产精品国产自产拍高清av| 久久久国产精彩视频美女艺术照福利| 91久久亚洲| 久久亚洲欧洲| 午夜精品亚洲一区二区三区嫩草| 91久久精品一区二区别| 国产美女一区| 欧美三区在线视频| 久久免费99精品久久久久久| 亚洲男女毛片无遮挡| 亚洲国产一区二区a毛片| 久久久久久亚洲精品中文字幕| 宅男噜噜噜66一区二区66| 亚洲电影免费| 国产一区二区日韩精品| 国产精品久久999| 欧美精品一区二区视频| 久久香蕉国产线看观看av| 亚洲欧美成aⅴ人在线观看| 日韩一区二区高清| 亚洲电影免费| 欧美高清在线一区二区| 另类春色校园亚洲| 久久精品一区二区三区不卡| 亚洲免费在线观看视频| 亚洲少妇自拍| 一区二区三区偷拍| 一本高清dvd不卡在线观看| 亚洲黄网站黄| 亚洲区免费影片| 亚洲狠狠丁香婷婷综合久久久| 狠狠入ady亚洲精品经典电影| 国产精自产拍久久久久久| 国产精品亚洲成人| 国产精品视频久久久| 国产欧美精品在线观看| 国产婷婷精品| 国产综合网站| 国内外成人在线| 精品成人一区| 亚洲电影免费在线观看| 亚洲人成网站精品片在线观看| 在线观看日韩www视频免费| 亚洲国产精品精华液2区45| 亚洲国产一区二区视频| 日韩亚洲欧美一区二区三区| 99国产成+人+综合+亚洲欧美| 一区二区国产精品| 亚洲女同在线| 久久久久国产精品人| 美女黄网久久| 亚洲人成网站在线播| 在线一区欧美| 欧美在线视频导航| 久久视频在线免费观看| 欧美精品九九| 欧美性生交xxxxx久久久| 欧美日韩在线视频一区| 久久激情中文| 亚洲免费在线看| 久久免费精品日本久久中文字幕| 免费成人黄色| 国产精品分类| 国产亚洲精品aa午夜观看| 1000部国产精品成人观看| 亚洲精品国产精品国自产在线| 中文亚洲欧美| 久久久久久久综合色一本| 91久久精品美女高潮| 亚洲一区二区三区四区五区黄 | 女女同性精品视频| 亚洲最黄网站| 久热re这里精品视频在线6| 欧美破处大片在线视频| 国产伊人精品| 一区二区毛片| 欧美成人国产一区二区| 日韩视频―中文字幕| 久久九九热re6这里有精品| 欧美日韩在线看| 亚洲电影在线免费观看| 亚洲欧美精品| 亚洲欧洲精品一区二区三区| 午夜激情久久久| 欧美日韩在线另类| 在线日韩成人| 欧美一区免费视频| 日韩视频免费在线| 麻豆精品国产91久久久久久| 国产精品三级久久久久久电影| 最新国产成人在线观看| 久久久国产精品一区二区三区| 一区二区三区国产精品| 欧美精品一区二区三区一线天视频|