锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲网站视频,中文网丁香综合网,欧美一级淫片aaaaaaa视频http://m.shnenglu.com/tgh621/category/8150.html涓撴敞鎶鏈紑鍙?/description>zh-cnWed, 11 Feb 2009 17:37:41 GMTWed, 11 Feb 2009 17:37:41 GMT60MFC紿楀彛鐨勬竻闄よ繃紼媅杞琞http://m.shnenglu.com/tgh621/archive/2009/02/11/73433.html澶ф搗澶ф搗Wed, 11 Feb 2009 02:50:00 GMThttp://m.shnenglu.com/tgh621/archive/2009/02/11/73433.htmlhttp://m.shnenglu.com/tgh621/comments/73433.htmlhttp://m.shnenglu.com/tgh621/archive/2009/02/11/73433.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/73433.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/73433.html瀵逛簬vc++鍒濆鑰呮潵璇?鎬昏寰楃獥鍙e璞$殑娓呴櫎榪囩▼鏈変簺鑾悕鍏跺.鍦ㄧ▼搴忎腑鐪嬩笉鍒板delete鐨勬樉寮忚皟鐢?榪欎技涔庤繚鍙嶄簡c++涓湁鍏沖垵濮嬪寲鍜屾竻闄ょ殑瑙勫垯.閭d箞,紼嬪簭鏄庢牱鍙栨秷涓涓獥鍙e璞?

瑕佹秷闄ょ獥鍙e璞?蹇呴』娓呮紿楀彛瀵硅薄鐨勬瀯鎴?鍦ㄤ竴涓氬父鐨勭▼搴忎腑錛屽厛鍒涘緩c++紿楀彛瀵硅薄,鐒跺悗鐢盬indows鍒涘緩瀹為檯鐨勭獥鍙g粨鏋?騫惰繑鍥炲彞鏌勪笌c++瀵硅薄榪炴帴.涔熷氨鏄,紿楀彛瀵硅薄鍖呭惈c++紿楀彛瀵硅薄鍜學indows紿楀彛瀵硅薄,涓よ呴氳繃鍙ユ焺HWND鑱旂郴.

鐜板湪,璁╂垜浠湅鐪?姝h"鐨勭獥鍙e璞℃竻闄ゆ祦紼?鎵璋撳璞$殑娓呴櫎鏄寚閲婃斁瀵硅薄鎵鍗犵殑璧勬簮,紿楀彛瀵硅薄涓璚indows紿楀彛瀵硅薄鍗犳湁鐨勬槸緋葷粺璧勬簮,c++瀵硅薄鍗犳湁鐨勬槸鍐呭瓨璧勬簮.閲婃斁緋葷粺璧勬簮鐩稿瑕佺畝鍗曚竴浜?璋冪敤铏氬嚱鏁癉estroyWindow鍒犻櫎Windows紿楀彛瀵硅薄.濡傛灉DestroyWindow鍒犻櫎鐨勬槸鐖剁獥鍙?Windows浼氳嚜鍔ㄤ負瀛愮獥鍙h皟鐢―estroyWindow.涓鑸潵璇?紼嬪簭涓嶅繀璋冪敤DestroyWindow.鍥犱負褰撶敤鎴峰叧闂獥鍙f椂,Windows渚垮彂閫乄M_CLOSE娑堟伅,WM_CLOSE鐨勭己鐪佹秷鎭鐞嗗嚱鏁癈Wnd::OnClose璋冪敤DestroyWindow.

鍒拌繖鏃?娓呴櫎宸ヤ綔宸茬粡瀹屾垚浜嗕竴鍗?灞忓箷涓婄殑紿楀彛宸茬粡涓嶈浜?浣嗘槸鍒繕浜?鍦ㄥ唴瀛樹腑榪樻湁涓涓猚++紿楀彛瀵硅薄.璁╂垜浠啀鐪嬬湅c++瀵硅薄娓呴櫎鐨勮繃紼?褰撶獥鍙h鍙栨秷鏃?紿楀彛鏈鍚庡彂閫佺殑涓涓秷鎭槸WM_NCDESTROY.瀹冪己鐪佺殑娑堟伅澶勭悊鍑芥暟CWnd::OnNcDestroy鎶奵++紿楀彛瀵硅薄涓庡彞鏌凥WND鍒嗙,騫惰皟鐢ㄤ竴涓緢閲嶈鐨勮櫄鍑芥暟PostNcDestroy.榪欎釜鍑芥暟鏄悶娓呯獥鍙e璞℃竻闄ょ殑鍏抽敭.Cwnd涓殑PostNcDestroy浠涔堥兘涓嶅仛.鏈変簺MFC紿楀彛綾諱細閲嶈澆瀹?騫跺姞鍏elete this浠g爜鍒犻櫎c++瀵硅薄.榪欎簺紿楀彛綾誨父甯告槸浠ew鎿嶄綔絎﹀緩绔嬪湪鍫嗕腑鐨?鐢變簬閲嶈澆浜哖ostNcDestroy,浣跨獥鍙f湁鑷姩娓呴櫎鍔熻兘.鍥犳,鎴戜滑涓嶇敤鍏沖績娓呴櫎闂浜?鍙﹀鐨勪竴浜汳FC紿楀彛綾諱竴鑸槸浠ュ彉閲忓艦寮忓垱寤虹殑,MFC娌℃湁涓轟篃娌″繀瑕佷負瀹冧滑閲嶈澆PostNcDestroy鍑芥暟.

涓嶅叿澶囪嚜鍔ㄦ竻闄ゅ姛鑳界殑紿楀彛綾?涓鑸湪鍫嗘爤涓垱寤烘垨宓屽叆浜庡叾瀹僣++瀵硅薄涓?

鎵鏈夋爣鍑嗙殑Windows鎺т歡綾?濡侰Static, CEdit, CListBox絳夌瓑)

鐢盋Wnd綾葷洿鎺ユ淳鐢熷嚭鏉ョ殑瀛愮獥鍙e璞?濡傜敤鎴峰畾鍒剁殑鎺т歡)

鎷嗗垎紿楀彛綾?CSplitterWnd)

緙虹渷鐨勬帶鍒舵潯綾?CControlBar鐨勬淳鐢熺被)

瀵硅瘽妗嗙被(CDialog)鍦ㄥ爢鏍堜笂鍒涘緩鐨勬ā鎬佸璇濇綾?/p>

鎵鏈夌殑Windows閫氱敤瀵硅瘽妗?闄FindReplaceDialog)

鐢盋lassWizard鍒涘緩鐨勫璇濇

鍏鋒湁鑷姩娓呴櫎鍔熻兘鐨勭獥鍙g被,涓鑸湪鍫嗕腑鍒涘緩:

涓繪鏋剁獥鍙g被(鐩存帴鎴栭棿鎺ヤ粠CFrameWnd綾繪淳鐢?

瑙嗗浘綾?鐩存帴鎴栭棿鎺ヤ粠CView綾繪淳鐢?

浠庢煇縐嶇▼搴︿笂鏉ヨ,MFC鐨?鏈嶅姟鍒板"浣垮垵瀛﹁呮湁浜涙壘涓嶇潃鍖?涓嶈繃,涓嶅緱涓嶆壙璁?MFC騫茬殑寰堟紓浜?

璋堝埌榪欓噷,鎴戜滑搴旇鏄庣櫧c++閲屼竴鏉¢噸瑕佺殑鍑嗗垯:鐢―estroyWindow娓呴櫎紿楀彛瀵硅薄,涓嶈鐢?delete".

瀵逛簬涓嶅叿澶囪嚜鍔ㄦ竻闄ゅ姛鑳界殑紿楀彛綾諱嬌鐢?delete"鏃?"delete"鍏堣皟鐢ㄦ瀽鏋勫嚱鏁伴噷鐨凞estroyWindow,鐢變簬鍦ㄦ瀽鏋勫嚱鏁頒腑,铏氭満鍒朵笉璧蜂綔鐢?榪欓噷鍙兘璋冪敤鏈湴鐗堟湰(Cwnd綾?DestroyWindow鍑芥暟,鏄劇劧榪欎笉鏄垜浠兂瑕佺殑.瀵逛簬鏈夎嚜鍔ㄦ竻闄ゅ姛鑳界殑紿楀彛綾?濂借薄闂鏇翠弗閲嶄竴鐐?鍓嶉潰鎻愬埌浜嗛噸杞界殑PostNcDestroy宸茬粡鍚湁浜?delete this",榪欐牱c++瀵硅薄灝辮閲婃斁浜嗕袱嬈?

寰堝浜鴻涓?vc++鍚寁b涓鏍?鏄竴涓畬鍏ㄥ彲瑙嗗寲鐨勪駭鍝?涓嶇敤鍦ㄧ湅c++鐨勪功浜?閫氳繃涓婇潰瀵圭獥鍙e璞$殑娓呴櫎鐨勪粙緇?鍙互鍙戠幇,Windows紼嬪簭鏄笌Windows绱у瘑緇撳悎鐨?鑰屼笖鐗墊秹鍒板緢澶歝++鐨勭煡璇?濡傝櫄鍑芥暟銆佹瀽鏋勫嚱鏁般乶ew鎿嶄綔絎︾瓑).瑕佸vc++鏈夎繘涓姝ョ悊瑙?蹇呴』鐞嗚ВWindows鏈哄埗,娣卞叆瀛︿範c++.



澶ф搗 2009-02-11 10:50 鍙戣〃璇勮
]]>
[杞琞鍙湪榪愯鏃剁紪杈戠殑鍔犻熼敭琛?/title><link>http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Mon, 12 Jan 2009 09:22:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/71821.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/71821.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/71821.html</trackback:ping><description><![CDATA[錛婏紛錛婄畝銆浠嬶紛錛婏紛 <p>銆銆鏈枃棣栧厛綆瑕佷粙緇嶄簡涓涓?a target=_blank><u><font color=#0000ff>Windows</font></u></a>涓殑鍑犱釜涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ湁鍏崇殑API鍑芥暟鍙婄粨鏋勩傜劧鍚庡鍦╓IN32浣嶇▼搴忎腑瀹炵幇<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛屼簡鎺㈣錛屽垎鍒氨API涓嬬殑紼嬪簭璁捐鍙奙FC涓嬬殑紼嬪簭璁捐榪涜浜嗗彊榪般?br>銆銆瀵逛簬榪愯鏃跺彲緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ粎鍦∕FC涓嬭繘琛屼簡璇︾粏鎻忚堪銆傚寘鎷叾瀹炵幇鍘熺悊錛屽茍寮曞澶у寤虹珛浜嗕竴涓敤浜庣紪杈?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勫璇濇錛屽惈璇︾粏鐨勪唬鐮併傚叧浜庡湪API涓嬪疄鐜拌繍琛屾椂鐨勫彲緙栬緫<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ笉鍐嶅彊榪幫紝鍙弬鑰僊FC涓嬬殑浠g爜銆?br>銆銆鎴戜滑閫氬父甯屾湜灝嗙紪杈戣繃鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿搗鏉ワ紝浠ヤ究涓嬫榪愯紼嬪簭鏃朵繚鎸佹垜浠紪杈戝悗鐨勯鏍箋傚湪鏈枃鐨勬渶鍚庯紝浠嬬粛浜嗗浣曞皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿嚦鏂囦歡涓紝騫朵粠鏂囦歡涓鍙栨垜浠繚瀛樼殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ備綘鑻ユ槸鏈夋剰灝?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿嚦<a target=_blank><u><font color=#0000ff>娉ㄥ唽琛?/font></u></a>鎴栧叾瀹冧粈涔堝湴鏂癸紝鍙弬鑰冨叾瀹冪殑鏈夊叧璧勬枡銆傛湰浜哄緩璁繚瀛樿嚦鏂囦歡姣旇緝鎭板綋銆?br>銆銆鏈枃浠嬬粛鐨勬墍鏈夋柟娉曞強浠g爜閮芥槸鍦?Windows98SE + Microsoft Visual <a target=_blank><u><font color=#0000ff>C++</font></u></a> 6.0 涓繘琛岀紪鍒跺拰璋冭瘯鐨勩傘</p> <p><br>銆銆涓銆佷笌<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ湁鍏崇殑鍑犱釜API鍑芥暟鍜岀粨鏋勩?/p> <p>銆銆鎿嶄綔<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ嬌鐢ㄧ殑鍑犱釜API鍑芥暟錛堝叧浜庤繖鍑犱釜鍑芥暟鐨勮緇嗚鏄庤鍙傝冩湁鍏充功綾嶏級錛?br>銆銆HACCEL LoadAccelerators(HINSTANCE hInstance, LPCTSTR lpTableNAme);<br>銆銆LoadAccelerators鍑芥暟浠庣▼搴忕殑璧勬簮涓姞杞戒竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛紝鍔犺澆鎴愬姛鍚庤繑鍥炰竴涓姞閫熷仴琛ㄧ殑鍙ユ焺銆傚叾涓細<br>銆銆hInstance銆銆搴旂敤紼嬪簭鐨勫疄渚嬪彞鏌勩?br>銆銆lpTableName銆鎸囧悜<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ悕縐板瓧絎︿覆鐨勬寚閽堛?/p> <p>銆銆HACCEL CreateAcceleratorTable(LPACCEL lpaccl, int cEntries);<br>銆銆CreateAcceleratorTable鍑芥暟鏍規(guī)嵁涓涓狝CCEL緇撴瀯鏁扮粍鍒涘緩涓涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ傝鍑芥暟涓嶭oadAccelerators涓嶅悓鐨勬槸錛歀oadAccelerators鍑芥暟鍔犺澆鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ湪紼嬪簭緇撴潫鍚庣郴緇熶細鑷姩灝嗚<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ粠鍐呭瓨涓竻闄わ紝浣咰reateAcceleratorTable鍑芥暟鍒涘緩鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄩ渶瑕佷嬌鐢ㄥ嚱鏁癉estoryAceleratorTable鍑芥暟榪涜娓呴櫎銆?br>銆銆lpaccl銆銆銆涓涓寚鍚慉CCEL緇撴瀯鏁扮粍鐨勬寚閽堛?br>銆銆cEntries銆銆鏁扮粍涓厓绱犵殑涓暟銆?/p> <p>銆銆BOOL銆DestoryAcceleratorTable(HACCEL hAccel);<br>銆銆DestoryAcceleratorTable鍑芥暟娓呴櫎鐢盋reateAcceleratorTable鍑芥暟鍒涘緩鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛紝鎴愬姛鍒欒繑鍥濼RUE銆傚叾涓細<br>銆銆hAccel銆銆銆闇瑕佹竻闄ょ殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ彞鏌勩?/p> <p>銆銆int TranslateAccelerator(HWND hWd, HACCEL hAccTable, LPMSG lpMsg);<br>銆銆TranslateAccelerator鍑芥暟璐熻矗緲昏瘧<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>銆傚叾涓細<br>銆銆hWnd銆銆銆銆 紿楀彛鍙ユ焺錛岀炕璇戝悗鐨勬秷鎭皢琚彂寰璇ョ獥鍙?br>銆銆hAccTable銆銆<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ彞鏌勩?br>銆銆lpMsg銆銆銆銆鎸囧悜MSG緇撴瀯鐨勬寚閽堛?/p> <p>銆銆ACCEL緇撴瀯鐨勫畾涔夛細<br>typedef struct tagACCEL{<br>    BYTE    fVirt;<br>    WORD    key;<br>    WORD    cmd;<br>}ACCEL,*LPACCEL;</p> <p>鍏朵腑錛?br>銆銆fVirt銆銆銆<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勬爣璁般?br>銆銆key銆銆銆銆閿殑浠g爜銆傚fVirt鎴愬憳鍖呭惈FVIRTKEY鏍囧織錛屽垯key鎸囦竴涓櫄閿爜錛屽惁鍒欐槸涓涓狝SCII鐮併?br>銆銆cmd銆銆銆銆鍛戒護ID鍙鳳紝璇ュ弬鏁板皢琚斁鍏M錛緾OMMAND鎴朩M錛縎YSCOMMAND娑堟伅鐨剋Param鍙傛暟鐨勪綆浣嶅瓧鍙戣嚦紿楀彛銆?/p> <p><br>銆銆浜屻佸湪windows涓嬪浣曚嬌鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?/p> <p>銆銆鍦╳indow涓嬩嬌鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ竴鑸湁涓ょ鏂規(guī)硶錛?錛屽垱寤轟竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>璧勬簮錛屽湪紼嬪簭涓嬌鐢ˋPI鍑芥暟LoadAccelerators鏉ュ皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ姞杞藉叆鍐呭瓨銆傚茍鍦ㄦ秷鎭驚鐜腑浣跨敤API鍑芥暟TranslateAccelerator鏉ョ炕璇戣<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?銆佸湪紼嬪簭涓~鍏呬竴涓狝CCEL鏁扮粍銆傜劧鍚庤皟鐢ˋPI鍑芥暟CreateAcceleratorTable鏉ュ垱寤哄姞閫熻〃錛岀炕璇?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鍚屼笂錛屼絾涓嶈蹇樿鍦ㄩ鍑虹▼搴忓墠浣跨敤API鍑芥暟DestoryAcceleratorTable鏉ユ竻闄ゅ畠銆備笅闈㈠垎鍒粰鍑轟竴涓緥瀛愶細</p> <p>/*渚?:浣跨敤LoadAccelerators銆?br>銆鍋囪浣犲凡緇忓緩绔嬩簡涓涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>璧勬簮錛孖D涓篒DR錛緼CCEL銆?br>銆鍋囪浣犲凡緇忓畾涔変簡鍒濆鍖栧嚱鏁癐nitApplication(HINSTANCE hInstance,int nCmdShow),<br>銆璇ュ嚱鏁版墽琛屾敞鍐岀獥鍙g被鍜屽垱寤虹獥鍙f搷浣溿?br>*/<br>#include <windows.h><br>#include "rc/resource.h"<br>BOOL InitApplication(HINSTANCE hInstance,int nCmdShow);</p> <p>int APIENTRY WinMain(HINSTANCE hInstance,<br>                     HINSTANCE hPrevInstance,<br>                     LPSTR     lpCmdLine,<br>                     int       nCmdShow) <br>{<br>     MSG msg;<br>     HANDLE hAccelTable;<br>     // 鍒濆鍖栧簲鐢ㄧ▼搴忥紝騫剁敓鎴愪富紿楀彛.<br>     if (!InitApplication(hInstance, nCmdShow))<br>     {<br>         return FALSE;           // 鍒濆鍖栧け璐?br>     }<br>      //浣跨敤鍑芥暟LoadAccelerators浠庣▼搴忚祫婧愪腑鍔犺澆<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?br>      hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCEL));<br>      // 鍙栧緱騫跺垎鍙戞秷鎭洿鍒版帴鏀跺埌 WM_QUIT 娑堟伅.<br>     while (GetMessage(&msg, NULL, 0, 0))<br>     {<br>         //鍦ㄥ垎鍙戞秷鎭墠棣栧厛璇曠潃鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛岀炕璇戯紝濡傛灉鏄竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鍒欑敱<br>         //TranslateAccelerator鍑芥暟榪涜緲昏瘧錛屼笉鍐嶇戶緇鐞嗚娑堟伅銆?br>         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))<br>         {<br>             TranslateMessage(&msg);<br>             DispatchMessage(&msg);<br>         }<br>     }<br>     return msg.wParam;  // Returns the value from PostQuitMessage <br>} <br> </p> <p><br>/*渚?:浣跨敤CreateAcceleratorTable銆?br>銆鍋囪浣犲凡緇忓畾涔変簡鍒濆鍖栧嚱鏁癐nitApplication(HINSTANCE hInstance,int nCmdShow),<br>銆璇ュ嚱鏁版墽琛屾敞鍐岀獥鍙g被鍜屽垱寤虹獥鍙f搷浣溿?br>*/</p> <p>#include <windows.h><br>#include "rc/resource.h"</p> <p>錛僤efine ID_CMD_A      0x00000230<br>錛僤efine ID_CMD_B      0x00000231<br>錛僤efine ID_CMD_C      0x00000232<br>錛僤efine ID_CMD_D      0x00000233<br>錛僤efine ID_CMD_E      0x00000234<br>錛僤efine ID_CMD_F      0x00000235<br>錛僤efine ID_CMD_G      0x00000236</p> <p>//瀹氫箟浜嗕竷涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>,璇峰湪娑堟伅鍥炶皟鍑芥暟涓鐞嗚繖涓冧釜鍛戒護ID銆?br>static ACCEL accel[]={<br>    {FVIRTKEY|FCONTROL,VK_F5,ID_CMD_A},<br>    {FVIRTKEY|FCONTROL,VK_F6,ID_CMD_B},<br>    {FVIRTKEY|FCONTROL,VK_HOME,ID_CMD_C},<br>    {FVIRTKEY|FCONTROL,VK_END,ID_CMD_D},<br>    {FVIRTKEY|FCONTROL,"G",ID_CMD_E},<br>    {FVIRTKEY|FCONTROL,VK_SPACE,ID_CMD_F},<br>    {FVIRTKEY|FCONTROL,"K",ID_CMD_G},<br>};    </p> <p>BOOL InitApplication(HINSTANCE hInstance,int nCmdShow);</p> <p>int APIENTRY WinMain(HINSTANCE hInstance,<br>                     HINSTANCE hPrevInstance,<br>                     LPSTR     lpCmdLine,<br>                     int       nCmdShow) <br>{<br>     MSG msg;<br>     HANDLE hAccelTable;<br>     // 鍒濆鍖栧簲鐢ㄧ▼搴忥紝騫剁敓鎴愪富紿楀彛.<br>     if (!InitApplication(hInstance, nCmdShow))<br>     {<br>         return FALSE;           // 鍒濆鍖栧け璐?br>     }<br>      //浣跨敤鍑芥暟CreateAcceleratorTable浠庢暟緇刟ccel涓姞杞?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?br>      hAccelTable = CreateAcceleratorTable(accel, sizeof(accel)/sizeof(ACCEL));<br>      // 鍙栧緱騫跺垎鍙戞秷鎭洿鍒版帴鏀跺埌 WM_QUIT 娑堟伅.<br>     while (GetMessage(&msg, NULL, 0, 0))<br>     {<br>         //鍦ㄥ垎鍙戞秷鎭墠棣栧厛璇曠潃鐢?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛岀炕璇戯紝濡傛灉鏄竴涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鍒欑敱<br>         //TranslateAccelerator鍑芥暟榪涜緲昏瘧錛屼笉鍐嶇戶緇鐞嗚娑堟伅銆?br>         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))<br>         {<br>             TranslateMessage(&msg);<br>             DispatchMessage(&msg);<br>         }<br>     }<br>     //鍒犻櫎<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?br>     DestoryAcceleratorTable(hAccelTable);<br>     return msg.wParam;  // Returns the value from PostQuitMessage <br>} <br> </p> <p><br>銆銆鍦∕FC紼嬪簭璁捐涓紝鏈夊叧浜?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鎿嶄綔宸茬粡琚獵FrameWnd綾昏繘琛屼簡灝佽銆傞氬父錛屾垜浠殑紼嬪簭鐨勪富妗嗘灦綾籆MainFrame浠嶤FrameWnd綾繪淳鐢燂紙SDI鐣岄潰紼嬪簭錛夛紝鎴栬呬粠CMDIFrameWnd綾繪淳鐢燂紙MDI鐣岄潰紼嬪簭錛夛紝鑰孋MDIFrameWnd綾諱篃鏄粠CFrameWnd綾繪淳鐢熺殑銆傛墍浠ワ紝鎴戜滑騫朵笉鐢ㄥ幓鍏沖績閭d釜璧勬簮鍙蜂負IDR_MAINFRAME鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ槸濡備綍鍔犺澆鐨勶紝濡傛灉浣犲彧鏄渶瑕佷竴涓繖鏍風殑闈欐佺殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑璇濄?br>銆銆閭d箞鎴戜滑鑳戒笉鑳戒嬌鐢ㄨ嚜宸辯殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ憿錛熺瓟妗堟槸錛氬彲浠ョ殑銆?br>銆銆鍒涘緩<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鏂規(guī)硶鍚屽墠銆傜敱浜庡湪MFC涓紝WinMain鍑芥暟琚殣钘忥紝鎴戜滑涓嶈兘鐩存帴淇敼WinMain鍑芥暟錛屾墍浠ワ紝<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鍒涘緩灝嗗湪CMainFrame鐨凮nCreate鍑芥暟涓垱寤恒?br>銆銆1銆佸湪CMainFrame綾諱腑娣誨姞涓涓狧ACCEL綾誨瀷淇濇姢鎴愬憳鍙橀噺錛歮_hMyAccel銆傚湪鏋勯犲嚱鏁頒腑鍒濆鍖栦負NULL銆?br>銆銆2銆佸湪CMainFrame::OnCreate鍑芥暟鐨?“return 0;”鍙ュ墠澧炲姞鍒涘緩<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑浠g爜銆傝繑鍥炵殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ彞鏌勪繚瀛樺湪m_hMyAccel涓細</p> <p>銆銆銆鏂規(guī)硶1錛?IDR錛縈YACCEL涓轟綘瀹氫箟鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ祫婧愬彿)<br>銆銆銆m_hMyAccel=LoadAccelerators(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDR_MYACCEL));</p> <p>銆銆銆鏂規(guī)硶2錛?accel鍚屽墠闈㈢殑渚嬪瓙涓鏍峰湪鏈枃浠剁殑寮澶撮儴鍒嗚繘琛屽畾涔?<br>銆銆銆m_hMyAccel=CreateAcceleratorTable(accel,sizeof(accel)/sizeof(ACCEL));</p> <p>銆銆3銆佸鏋滄槸浣跨敤CreateAccelTable鍑芥暟鍒涘緩鐨勶紝鍒欓噸杞借櫄鎷熷嚱鏁癉estoryWindow()銆傚湪璇ュ嚱鏁扮殑“return CMDIFrameWnd::DestroyWindow();”鍓嶅鍔犲涓嬩唬鐮?</p> <p>    if(m_hMyAccel!=NULL){<br>        DestroyAcceleratorTable(m_hMyAccel);<br>        m_hMyAccel=NULL;<br>    }</p> <p>銆銆閫氳繃鍓嶉潰鐨勪笁姝ワ紝<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ凡緇忚兘姝g‘鍦拌鍒涘緩鍜屽垹闄や簡錛屼絾鏄畠榪樻病鏈夊伐浣溿備笅闈㈠氨鏄璁╂垜浠垰鎵嶆墍鍒涘緩鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ伐浣滆搗鏉ャ?br>銆銆鍦ˋPI紼嬪簭璁捐涓ぇ瀹跺凡緇忕煡閬撲簡<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏄浣曞伐浣滅殑銆備篃灝辨槸鍦ㄦ秷鎭繕娌℃湁鍒嗗彂鍑哄幓涔嬪墠鍏堟鏌ユ槸涓嶆槸涓涓?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>銆傛垜浠氳繃API鍑芥暟TranslateAccelerator鏉ュ疄鐜般傚湪MFC涓紝娑堟伅鏈哄埗宸茬粡琚皝瑁呬簡錛屾垜浠笉鑳藉幓淇敼娑堟伅寰幆銆備絾鏄紝妗嗘灦鍦ㄥ垎鍙戞秷鎭墠浼氳皟鐢ㄨ櫄鎷熷嚱鏁癙erTranslateMessage錛屽茍涓斿鏋滆鍑芥暟榪斿洖TRUE錛屽垯涓嶅啀澶勭悊璇ユ秷鎭傝繖姝f槸鎴戜滑鎵闇瑕佺殑銆?br>銆銆璁╂垜浠啀鍥炲埌CMainFrame綾伙紝鐢熸垚PerTranslateMessage鍑芥暟鐨勮鐩栫増鏈備慨鏀瑰嚱鏁頒綋濡備笅錛?/p> <p>BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) <br>{<br>    // TODO: Add your specialized code here and/or call the base class<br>    if(m_hMyAccel&&TranslateAccelerator(m_hWnd, m_hMyAccel, pMsg))<br>        return TRUE;<br>    return CMDIFrameWnd::PreTranslateMessage(pMsg);<br>}</p> <p>銆銆濂戒簡錛岀幇鍦ㄦ垜浠殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>宸茬粡鑳芥甯稿湴宸ヤ綔浜嗐備互涓婃柟娉曠敤鍦ㄥ叾瀹冪獥鍙e悓鏍鋒湁鏁堬紙濡傚璇濇涓紝浣犱笉濡ㄥ湪瀵硅瘽妗嗕腑璇曡瘯錛夈?/p> <p><br>銆銆涓夈佸彲鍦ㄨ繍琛屾椂緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?/p> <p>銆銆閫氳繃涓婇潰鐨勫彊榪幫紝浣犲彲鑳藉凡緇忓鍙紪杈戠殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ湁浜嗕竴瀹氱殑杞粨銆傚叾瀹炲叾瀹炵幇鎬濇兂寰堢畝鍗曪細鍙瀵逛竴涓狝CCEL鏁扮粍榪涜淇敼錛岀劧鍚庨噸鏂扮敓鎴?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ氨琛屼簡銆?br>銆銆涓轟簡鍖哄垎鍛戒護錛屾垜浠負姣忎釜鍛戒護鍙栦竴涓悕瀛椼傚湪CMainFrame綾誨畾涔夌殑鍓嶉潰鍔犱笂涓嬮潰鐨勪竴涓粨鏋勫畾涔夛細</p> <p>typedef struct{<br>    char cCmd[32];<br>    ACCEL accel;<br>}ACCELITEM,*LPACCELITEM;</p> <p>銆銆鎴戜滑灝嗕嬌鐢ㄨ緇撴瀯鏉ヤ繚瀛?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑鏁版嵁銆傚湪CMainFrame綾諱腑娣誨姞涓や釜淇濇姢鎴愬憳鍙橀噺錛?/p> <p>    LPACCELITEM m_lpAccel;<br>    DWORD m_dwAccelCount;</p> <p>銆銆鍦ㄦ瀯閫犲嚱鏁頒腑灝唌_lpAccel鍒濆鍖栦負NULL錛宮_dwAccelCount鍒濆鍖栦負0銆傚湪鏁扮粍accel鐨勫畾涔変笅闈㈠鍔犱竴涓瓧絎︿覆鏁扮粍鐨勯潤鎬佸彉閲忕殑瀹氫箟錛堢敤鏉ユ寚瀹氬懡浠ょ殑鍚嶇О,璇蜂豢鐓т笅闈㈣嚜宸卞畾涔夛紝涓暟澶氬皯涓嶉檺錛屽瓧絎︿覆闀垮害涓嶈瓚呰繃31涓瓧絎︼級錛?/p> <p>static char strCmd[][32]={<br>    "Command One",<br>    "Command Two",<br>    "Command Three",<br>    "Command Four",<br>    "Command Five"<br>};</p> <p><br>銆銆鍦–MainFrame綾諱腑娣誨姞涓涓繚鎶ゆ垚鍛樺嚱鏁癓oadAccel(),璇ュ嚱鏁扮敤鏉ュ皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ鍏ワ紝瀹氫箟濡備笅錛?/p> <p>BOOL CMainFrame::LoadAccel()<br>{<br>    ASSERT(m_hActAccel==NULL);<br>    ASSERT(m_lpAccel==NULL);<br>    m_dwAccelCount=sizeof(accel)/sizeof(ACCEL);<br>    m_lpAccel=new ACCELITEM[m_dwAccelCount];<br>    memset(m_lpAccel,0,sizeof(ACCELITEM)*m_dwAccelCount);<br>    DWORD dwCmdStr=sizeof(strCmd)/sizeof(char[32]);<br>    for(DWORD dw=0;dw<m_dwAccelCount;dw++){<br>        m_lpAccel[dw].accel=accel[dw];<br>        strcpy(m_lpAccel[dw].cCmd,dw<dwCmdStr?strCmd[dw]:"Command Unknow");<br>    }</p> <p>    m_hActAccel=CreateAcceleratorTable(accel,m_dwAccelCount);<br>    return TRUE;</p> <p>}</p> <p>銆銆鍒犻櫎OnCreate鍑芥暟涓師鏉ュ垱寤?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄧ殑浠g爜錛屾敼鎴愬LoadAccel()鐨勮皟鐢細</p> <p>    LoadAccel();</p> <p>銆銆鍦–MainFrame鐨勬瀽鏋勫嚱鏁頒腑澧炲姞浠ヤ笅鍐呭錛?/p> <p>    if(m_lpAccel)<br>        delete[] m_lpAccel;</p> <p>銆銆涓轟簡鑳藉瀵?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏁版嵁榪涜緙栬緫錛屾垜浠湪宸ョ▼涓坊鍔犱竴涓璇濇璧勬簮錛孖D涓?#8220;IDD_ACCELEDIT”錛屽湪瀵硅瘽妗嗕笂鏀劇疆涓変釜鎴愮粍妗嗭紙Group Box錛夛紝宸﹁竟涓涓爣棰樹負“鍛戒護”錛涗腑闂翠竴涓爣棰樹負“緇勫悎閿?#8221;錛涘彸杈逛竴涓爣棰樹負“铏氶敭鍊?#8221;銆傚湪宸﹁竟鎴愮粍妗嗕腑鏀劇疆涓涓垪琛ㄦ錛圠ist Box錛夛紝ID涓?#8220;IDC_LST_CMD”銆傚湪涓棿鎴愮粍妗嗕腑鏀劇疆涓変釜鏍擱夋錛圕heck Box錛夛紝涓婁笅鎺掑垪銆備笂闈㈢殑鏍擱夋鐨処D涓?#8220;IDC_CHK_ALT”錛屾爣棰樹負“Alt”錛屽茍鍕鵑?#8220;Group”灞炴э紱涓棿鐨勬牳閫夋鐨処D涓?#8220;IDC_CHK_SHIFT”錛屾爣棰樹負“Shift”錛屽彇娑?#8220;Group”灞炴э紱涓嬮潰鐨勬牳閫夋鐨処D涓?#8220;IDC_CHK_CTRL”錛屾爣棰樹負“Ctrl”錛屽彇娑?#8220;Group”灞炴с傚湪鍙寵竟鐨勬垚緇勬涓斁緗竴涓垪琛ㄦ錛孖D涓?#8220;IDC_LST_KEY”銆傝皟鏁村悇涓帶浠剁殑灝哄鍙婁綅緗嚦鍚堥傘傝緗帶浠剁殑TAB璺寵漿欏哄簭錛屼粠宸﹁嚦鍙熾佷粠涓婂埌涓嬨備緷嬈′負錛氬乏鎴愮粍妗嗐両DC_LST_CMD鍒楄〃妗嗐佷腑鎴愮粍妗嗐両DC_CHK_ALT鏍擱夋銆両DC_CHK_SHIFT鏍擱夋銆両DC_CHK_CTRL鏍擱夋銆佸彸鎴愮粍妗嗐両DC_LST_KEY鍒楄〃妗嗐丱K鎸夐挳銆丆ANCEL鎸夐挳銆?br>銆銆鎵撳紑綾誨悜瀵鹼紝涓哄璇濇鏂板緩涓涓被錛岀被鍚嶄負“CDlgEditAccel”銆備負涓や釜鍒楄〃妗嗗拰涓変釜鏍擱夋鏄犲皠鍙橀噺錛屽涓嬶細<br>銆銆鎺т歡ID:ID_LST_CMD錛涚被鍨?Control/CListBox錛涘悕縐?m_LstCmd錛?br>銆銆鎺т歡ID:ID_LST_KEY錛涚被鍨?Control/CListBox錛涘悕縐?m_LstKey錛?br>銆銆鎺т歡ID:ID_CHK_ALT錛涚被鍨?Control/CButton錛涘悕縐?m_ChkAlt錛?br>銆銆鎺т歡ID:ID_CHK_SHIFT錛涚被鍨?Control/CButton錛涘悕縐?m_ChkShift錛?br>銆銆鎺т歡ID:ID_CHK_CTRL錛涚被鍨?Control/CButton錛涘悕縐?m_ChkCtrl錛?/p> <p>銆銆鍦ㄧ被CDlgEditAccel鐨勫畾涔夊墠鍔犲叆涓嬮潰鐨勫畾涔夛細<br>typedef struct tag_KeyName{<br>    CString m_strName;<br>    WORD m_wID;<br>    tag_KeyName(CString str,WORD id){m_strName=str,m_wID=id;}<br>}KEYNAME,*LPKEYNAME;</p> <p>typedef struct tag_ActAccel{<br>    CString m_strCmd;<br>    ACCEL m_Accel;<br>}ACTACCEL,*LPACTACCEL;</p> <p>class CActAccelList<br>{<br>public:<br>    CActAccelList();<br>    ~CActAccelList();</p> <p>protected:<br>    LPACTACCEL m_lpActAccel;<br>    int m_iCount;</p> <p>public:<br>    ACTACCEL& operator[](int index);<br>    BOOL SetSize(int iSize);<br>    int GetSize();<br>};</p> <p><br>銆銆鍦ㄦ枃浠禗lgEditAccel.cpp鏂囦歡涓畾涔夌被CActAccelList鐨勬垚鍛樺嚱鏁幫紝浠g爜濡備笅錛?br>CActAccelList::CActAccelList()<br>{<br>    m_lpActAccel=NULL;<br>   m_iCount=0;<br>}</p> <p>CActAccelList::~CActAccelList()<br>{<br>    if(m_iCount>0&&m_lpActAccel)<br>        delete[] m_lpActAccel;<br>}</p> <p>int CActAccelList::GetSize()<br>{<br>    return m_iCount;<br>}</p> <p>ACTACCEL& CActAccelList::operator []( int index)<br>{<br>    if(!(index>=0&&index<m_iCount))<br>    AfxThrowMemoryException();<br>    return m_lpActAccel[index];<br>}</p> <p>BOOL CActAccelList::SetSize(int iSize)<br>{<br>    if(iSize<0)<br>        return FALSE;<br>    if(m_iCount>0&&m_lpActAccel)<br>        delete[] m_lpActAccel;<br>    m_iCount=0;<br>    m_lpActAccel=new ACTACCEL[iSize];<br>    if(m_lpActAccel==NULL)<br>        return FALSE;<br>    m_iCount=iSize;<br>    return TRUE;<br>}</p> <p><br>銆銆鍦―lgAccelEdit.cpp鏂囦歡澶撮儴瀹氫箟鍏ㄥ眬鍙橀噺錛嶏紞鏁扮粍key錛?br>static KEYNAME key[]={<br>    KEYNAME("Left mouse button",VK_LBUTTON),<br>    KEYNAME("Right mouse button",VK_RBUTTON),<br>    KEYNAME("Control-break processing",VK_CANCEL),<br>    KEYNAME("Middle mouse button",VK_MBUTTON),<br>    KEYNAME("Back Space",VK_BACK),<br>    KEYNAME("Tab",VK_TAB),<br>    KEYNAME("Clear",VK_CLEAR),<br>    KEYNAME("Enter",VK_RETURN),<br>    KEYNAME("Shift",VK_SHIFT),<br>    KEYNAME("Ctrl",VK_CONTROL),<br>    KEYNAME("Alt",VK_MENU),<br>    KEYNAME("Pause",VK_PAUSE),<br>    KEYNAME("Caps Lock",VK_CAPITAL),<br>    KEYNAME("Esc",VK_ESCAPE),<br>    KEYNAME("Space",VK_SPACE),<br>    KEYNAME("Page Up",VK_PRIOR),  <br>    KEYNAME("Page Down",VK_NEXT),<br>    KEYNAME("End",VK_END),<br>    KEYNAME("Home",VK_HOME),<br>    KEYNAME("Left",VK_LEFT),<br>    KEYNAME("Up",VK_UP),<br>    KEYNAME("Right",VK_RIGHT),<br>    KEYNAME("Down",VK_DOWN),<br>    KEYNAME("Select",VK_SELECT),<br>    KEYNAME("Excute",VK_EXECUTE),<br>    KEYNAME("Print Screen",VK_SNAPSHOT),<br>    KEYNAME("Insert",VK_INSERT),<br>    KEYNAME("Delete",VK_DELETE),<br>    KEYNAME("Help",VK_HELP),<br>    KEYNAME("0",'0'),<br>    KEYNAME("1",'1'),<br>    KEYNAME("2",'2'),<br>    KEYNAME("3",'3'),<br>    KEYNAME("4",'4'),<br>    KEYNAME("5",'5'),<br>    KEYNAME("6",'6'),<br>    KEYNAME("7",'7'),<br>    KEYNAME("8",'8'),<br>    KEYNAME("9",'9'),<br>    KEYNAME("A",'A'),<br>    KEYNAME("B",'B'),<br>    KEYNAME("C",'C'),<br>    KEYNAME("D",'D'),<br>    KEYNAME("E",'E'),<br>    KEYNAME("F",'F'),<br>    KEYNAME("G",'G'),<br>    KEYNAME("H",'H'),<br>    KEYNAME("I",'I'),<br>    KEYNAME("J",'J'),<br>    KEYNAME("K",'K'),<br>    KEYNAME("L",'L'),<br>    KEYNAME("M",'M'),<br>    KEYNAME("N",'N'),<br>    KEYNAME("O",'O'),<br>    KEYNAME("P",'P'),<br>    KEYNAME("Q",'Q'),<br>    KEYNAME("R",'R'),<br>    KEYNAME("S",'S'),<br>    KEYNAME("T",'T'),<br>    KEYNAME("U",'U'),<br>    KEYNAME("V",'V'),<br>    KEYNAME("W",'W'),<br>    KEYNAME("X",'X'),<br>    KEYNAME("Y",'Y'),<br>    KEYNAME("Z",'Z'),<br>    KEYNAME("Left windows",VK_LWIN),<br>    KEYNAME("Right windows",VK_RWIN),<br>    KEYNAME("Applications",VK_APPS),<br>    KEYNAME("Numeric keypad 0", VK_NUMPAD0),<br>    KEYNAME("Numeric keypad 1", VK_NUMPAD1),<br>    KEYNAME("Numeric keypad 2", VK_NUMPAD2),<br>    KEYNAME("Numeric keypad 3", VK_NUMPAD3),<br>    KEYNAME("Numeric keypad 4", VK_NUMPAD4),<br>    KEYNAME("Numeric keypad 5", VK_NUMPAD5),<br>    KEYNAME("Numeric keypad 6", VK_NUMPAD6),<br>    KEYNAME("Numeric keypad 7", VK_NUMPAD7),<br>    KEYNAME("Numeric keypad 8", VK_NUMPAD8),<br>    KEYNAME("Numeric keypad 9", VK_NUMPAD9), <br>    KEYNAME("Multiply",VK_MULTIPLY),<br>    KEYNAME("Add",VK_ADD),<br>    KEYNAME("Separator",VK_SEPARATOR),<br>    KEYNAME("Subtract",VK_SUBTRACT),<br>    KEYNAME("Decimal Point",VK_DECIMAL),<br>    KEYNAME("Divide",VK_DIVIDE),<br>    KEYNAME("F1",VK_F1),<br>    KEYNAME("F2",VK_F2),<br>    KEYNAME("F3",VK_F3),<br>    KEYNAME("F4",VK_F4),<br>    KEYNAME("F5",VK_F5),<br>    KEYNAME("F6",VK_F6),<br>    KEYNAME("F7",VK_F7),<br>    KEYNAME("F8",VK_F8),<br>    KEYNAME("F9",VK_F9),<br>    KEYNAME("F10",VK_F10),<br>    KEYNAME("F11",VK_F11),<br>    KEYNAME("F12",VK_F12),<br>    KEYNAME("F13",VK_F13),<br>    KEYNAME("F14",VK_F14),<br>    KEYNAME("F15",VK_F15),<br>    KEYNAME("F16",VK_F16),<br>    KEYNAME("F17",VK_F17),<br>    KEYNAME("F18",VK_F18),<br>    KEYNAME("F19",VK_F19),<br>    KEYNAME("F20",VK_F20),<br>    KEYNAME("F21",VK_F21),<br>    KEYNAME("F22",VK_F22),<br>    KEYNAME("F23",VK_F23),<br>    KEYNAME("F24",VK_F24),<br>    KEYNAME("Attn",VK_ATTN),<br>    KEYNAME("CrSel",VK_CRSEL),<br>    KEYNAME("ExSel",VK_EXSEL),<br>    KEYNAME("Erase",VK_EREOF),<br>    KEYNAME("Play",VK_PLAY),<br>    KEYNAME("Zoom",VK_ZOOM),<br>    KEYNAME("Reserved for future use",VK_NONAME ),<br>    KEYNAME("PA1",VK_PA1),<br>    KEYNAME("Clear(OEM)",VK_OEM_CLEAR ),</p> <p>    KEYNAME("<a href="file://%22,'//'"><u><font color=#0000ff>file://",'//'</font></u></a>),<br>    KEYNAME("-",'-'),<br>    KEYNAME("=",'='),<br>    KEYNAME("[",'['),<br>    KEYNAME("]",']'),<br>    KEYNAME(";",';'),<br>    KEYNAME("\'",'\''),<br>    KEYNAME(",",','),<br>    KEYNAME(".",'.'),<br>    KEYNAME("/",'/'),<br>    KEYNAME("`",'`')<br>};</p> <p><br>銆銆鍦ㄧ被CDlgAccelEdit涓搷搴擶indows娑堟伅錛歐M_INITDIALOD錛屼唬鐮佸涓嬶細<br>BOOL CDlgEditAccel::OnInitDialog() <br>{<br>    CDialog::OnInitDialog();</p> <p>    // TODO: Add extra initialization here<br>    SetWindowText("Edit Accelerator Table");</p> <p>    int iCount=m_AccelList.GetSize();<br>    int i;<br>    for(i=0;i<iCount;i++){<br>        m_LstCmd.AddString(m_AccelList[i].m_strCmd);<br>    }<br>    for(i=0;i<sizeof(key)/sizeof(KEYNAME);i++)<br>    {<br>        m_LstKey.AddString(key[i].m_strName);<br>    }<br>    m_LstCmd.SetCurSel(0);<br>    OnSelchangeLstCmd();<br>    return TRUE;  // return TRUE unless you set the focus to a control<br>                  // EXCEPTION: OCX Property Pages should return FALSE<br>}</p> <p><br>銆銆涓虹被CDglAccelEdit澧炲姞涓涓繚鎶ゆ垚鍛樺嚱鏁幫細<br>    void SaveChange(int index=-1);</p> <p>銆銆鍦ㄦ枃浠禗lgAccelEdit涓畾涔夎鍑芥暟錛屼唬鐮佸涓嬶細</p> <p>void CDlgEditAccel::SaveChange(int index)<br>{<br>    if(index>=0||(index=m_LstCmd.GetCurSel())>=0)<br>    {<br>        if(m_LstKey.GetCurSel()<0){<br>            AfxMessageBox("浣犲繀闇閫夋嫨涓涓敭鐮?");<br>            return;<br>        }<br>        BYTE btCmp=((m_ChkAlt.GetCheck()==1)?FALT:NULL)|<br>                   ((m_ChkCtrl.GetCheck()==1)?FCONTROL:NULL)|<br>                   ((m_ChkShift.GetCheck()==1)?FSHIFT:NULL)|FVIRTKEY;<br>        WORD wKey=key[m_LstKey.GetCurSel()].m_wID;</p> <p>        m_AccelList[index].m_Accel.fVirt=btCmp;<br>        m_AccelList[index].m_Accel.key=wKey;<br>        return;<br>    }<br>}</p> <p>銆銆鍝嶅簲鍒楄〃妗咺D_LST_CMD鐨勯氱煡娑堟伅“LBN_SELCHANGE”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnSelchangeLstCmd() <br>{<br>    // TODO: Add your control notification handler code here<br>    int iCmd=m_LstCmd.GetCurSel();<br>    WORD wKey=m_AccelList[iCmd].m_Accel.key;<br>    BYTE btCmp=m_AccelList[iCmd].m_Accel.fVirt;<br>    m_ChkAlt.SetCheck(btCmp&FALT);<br>    m_ChkCtrl.SetCheck(btCmp&FCONTROL);<br>    m_ChkShift.SetCheck(btCmp&FSHIFT);<br>    int iCount=sizeof(key)/sizeof(KEYNAME);<br>    int id=-1;<br>    for(int i=0;i<iCount;i++)<br>    {<br>        if(key[i].m_wID==wKey){<br>            id=i;<br>            break;<br>        }<br>    }<br>    m_LstKey.SetCurSel(id);</p> <p>}</p> <p>銆銆鍝嶅簲鍒楄〃妗咺D_LST_KEY鐨勯氱煡娑堟伅“LBN_SELCHANGE”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnSelchangeLstKey() <br>{<br>    SaveChange(); <br>}</p> <p>銆銆鍝嶅簲鏍擱夋ID_CHK_ALT鐨勯氱煡娑堟伅“BN_CLICKED”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnChkAlt() <br>{<br>    SaveChange();<br>}</p> <p>銆銆鍝嶅簲鏍擱夋ID_CHK_SHIFT鐨勯氱煡娑堟伅“BN_CLICKED”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnChkShift() <br>{<br>    SaveChange();<br>}</p> <p>銆銆鍝嶅簲鏍擱夋ID_CHK_CTRL鐨勯氱煡娑堟伅“BN_CLICKED”錛屽嚱鏁頒唬鐮佸涓嬶細<br>void CDlgEditAccel::OnChkCtrl() <br>{<br>    SaveChange();<br>}</p> <p>銆銆鑷蟲錛岀敤浜庣紪杈?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勫璇濇宸茬粡瀹屾垚銆傛垜浠幇鍦ㄨ鍋氱殑灝辨槸鍦ㄧ▼搴忎腑鎵撳紑瀵硅瘽妗嗘潵緙栬緫浜嗐傝鎴戜滑鍥炲埌CMainFrame綾諱腑銆傛垜浠皢鍦ㄨ綾諱腑鍝嶅簲涓涓懡浠ゆ潵鎵撳紑緙栬緫瀵硅瘽妗嗭紝瀵?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄨ繘琛岀紪杈戙傚畬鎴愬悗鐐規(guī)寜OK鍥炲埌涓葷▼搴忎腑錛岀劧鍚庢洿鏂?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ傝繖鏍峰悗錛屾垜浠垰鍒氱紪杈戝ソ鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ氨寮濮嬭搗浣滅敤浜嗐?br>銆銆棣栧厛錛屾墦寮鑿滃崟銆傚湪“鏌ョ湅”欏瑰悗澧炲姞涓涓?#8220;宸ュ叿(&T)”涓嬫媺鑿滃崟錛屽湪涓嬫媺鑿滃崟涓鍔犱竴涓簡鑿滃崟錛?#8220;緙栬緫<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?&A)...”錛孖D涓?#8220;ID_TOOL_ACCELEDIT”銆傛墦寮綾誨悜瀵鹼紝閫夋嫨CMainFrame綾伙紝鍝嶅簲“ID_TOOL_ACCELEDIT”鍛戒護銆傜紪杈戝搷搴斿嚱鏁板涓嬶細</p> <p>void CMainFrame::OnToolAcceledit() <br>{<br>    // TODO: Add your command handler code here<br>    CDlgEditAccel dlg;</p> <p>    DWORD i;<br>    dlg.m_AccelList.SetSize(m_dwAccelCount);<br>    for(i=0;i<m_dwAccelCount;i++){<br>        dlg.m_AccelList[i].m_strCmd=m_lpAccel[i].cCmd;<br>        dlg.m_AccelList[i].m_Accel=m_lpAccel[i].accel;<br>    }<br>    if(IDOK==dlg.DoModal()){<br>        ACCEL* pAccel=new ACCEL[m_dwAccelCount];<br>        for(DWORD dw=0;dw<m_dwAccelCount;dw++){<br>            m_lpAccel[dw].accel=pAccel[dw]=dlg.m_AccelList[dw].m_Accel;<br>        }</p> <p>        if(m_hActAccel!=NULL)<br>        DestroyAcceleratorTable(m_hActAccel);<br>        m_hActAccel=CreateAcceleratorTable(pAccel,m_dwAccelCount);<br>    }<br>}</p> <p>銆銆鍦ㄨ鏂囦歡鐨勫ご閮ㄥ寘鍚被CDlgEditAccel鐨勫ご鏂囦歡錛?/p> <p>#include "DlgEditAccel.h"</p> <p>銆銆鑷蟲錛屽彲緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ凡緇忓畬鎴愪簡銆備笉濡ㄨ瘯璇曠湅銆?/p> <p>銆銆涓夈佸皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿嚦鏂囦歡錛屽茍鍦ㄧ▼搴忚繍琛屾椂鑷姩浠庢枃浠朵腑鍔犺澆銆?/p> <p>銆銆涓婇潰鎴戜滑瀹炵幇浜嗗彲緙栬緫鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ備絾鏄紝褰撶▼搴忛鍑哄悗錛屾垜浠紪杈戣繃鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏁版嵁灝辨秷澶變簡錛屼笅嬈¤繍琛岀▼搴忔椂榪樻槸鍜屼互鍓嶄竴鏍蜂簡銆傚皢<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樿搗鏉ヤ互澶囦笅嬈′嬌鐢紝榪欐槸鎴戜滑鎵甯屾湜鐨勩備笅闈㈣璁虹殑鏂規(guī)硶鏄嬌鐢ㄦ枃浠舵潵淇濆瓨鎴戜滑鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄣ?br>銆銆棣栧厛錛屽湪MainFrm.cpp鏂囦歡鐨勫ご閮ㄥ畾涔変竴涓叏灞瀛楃涓詫紝涔熷氨鏄敤浜庝繚瀛?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鐨勬枃浠跺悕錛?/p> <p>static char strAccelFileName[]="Accel.cus";</p> <p>銆銆瀹氫箟涓涓狣WORD鍊間綔涓烘枃浠跺ご錛屾垜浠氳繃璇WORD鍊兼潵鍒ゆ柇鏄惁鏄竴涓湁鏁堟牸寮忕殑鏂囦歡錛?/p> <p>#define ACCEL_FILE_HEAD 0x00434341</p> <p><br>銆銆鍏舵錛屼負CMainFrame綾繪坊鍔犱竴涓繚鎶ょ殑鎴愬憳鍑芥暟錛?#8220;BOOL SaveAccel()”錛岀紪杈戝叾浠g爜濡備笅錛?br>BOOL CMainFrame::SaveAccel()<br>{<br>    char lpAppName[256];<br>    char lpAppPath[256];<br>    char* lpFilePart=NULL;<br>    GetModuleFileName(AfxGetInstanceHandle(),lpAppName,255);<br>    GetFullPathName(lpAppName,255,lpAppPath,&lpFilePart);<br>    TRACE1("Application File Name:%s.\n",lpAppName);<br>    strcpy(lpFilePart,strAccelFileName);<br>    TRACE1("Accelerator File Name:%s.\n",lpAppPath);<br>    try<br>    {<br>        DWORD dwHead=ACCEL_FILE_HEAD;<br>        DWORD dwCount=m_dwAccelCount;</p> <p>        CFile fAccel(lpAppPath,CFile::modeCreate|CFile::modeWrite);<br>        fAccel.SeekToBegin();<br>        fAccel.Write(&dwHead,sizeof(DWORD));<br>        fAccel.Write(&dwCount,sizeof(DWORD));<br>        for(DWORD dw=0;dw<dwCount;dw++)<br>        {<br>            fAccel.Write(m_lpAccel+dw,sizeof(ACCELITEM));<br>        }</p> <p>        return TRUE;</p> <p>    }</p> <p>    catch(CFileException* e)<br>    {<br>        char buf[256];<br>        char buf2[512];<br>        int iError;<br>        iError=e->m_cause;<br>        e->GetErrorMessage(buf,256);<br>        sprintf(buf2,"灝?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄤ繚瀛樺埌鏂囦歡 \"%s\" 涓椂鍙戠敓閿欒!\n"<br>                     "閿?璇?鍙?%d\n"<br>                     "閿欒鎻忚堪:%s\n"<br>                     "\0",<br>                     strAccelFileName,iError,buf);<br>        AfxMessageBox(buf2,MB_OK|MB_ICONSTOP|MB_DEFBUTTON1);<br>        return FALSE;<br>    }<br>}</p> <p>銆銆鍐嶆錛屼慨鏀筁oadAccel()鍑芥暟濡備笅錛?/p> <p>BOOL CMainFrame::LoadAccel()<br>{<br>    char lpAppName[256];<br>    char lpAppPath[256];<br>    char* lpFilePart=NULL;<br>    GetModuleFileName(AfxGetInstanceHandle(),lpAppName,255);<br>    GetFullPathName(lpAppName,255,lpAppPath,&lpFilePart);<br>    TRACE1("Application File Name:%s.\n",lpAppName);<br>    strcpy(lpFilePart,strAccelFileName);<br>    TRACE1("Accelerator File Name:%s.\n",lpAppPath);<br>    try<br>    {<br>        DWORD dwHead;<br>        DWORD dwCount;</p> <p>        CFile fAccel(lpAppPath,CFile::modeRead);<br>        fAccel.SeekToBegin();<br>        if(fAccel.Read(&dwHead,sizeof(DWORD))!=sizeof(DWORD))<br>            AfxThrowFileException(CFileException::endOfFile,12,lpAppPath);<br>        if(dwHead!=ACCEL_FILE_HEAD)<br>            AfxThrowFileException(CFileException::invalidFile,13,lpAppPath);</p> <p>        if(fAccel.Read(&dwCount,sizeof(DWORD))!=sizeof(DWORD))<br>            AfxThrowFileException(CFileException::endOfFile,12,lpAppPath);<br>        <br>        ASSERT(m_lpAccel==NULL);<br>        <br>        m_lpAccel=new ACCELITEM[dwCount];<br>        memset(m_lpAccel,0,sizeof(ACCELITEM)*dwCount);<br>        m_dwAccelCount=dwCount;</p> <p>        for(DWORD dw=0;dw<dwCount;dw++)<br>        {<br>            if(fAccel.Read(m_lpAccel+dw,sizeof(ACCELITEM))!=sizeof(ACCELITEM))<br>                AfxThrowFileException(CFileException::endOfFile,12,lpAppPath);<br>        }</p> <p>        ACCEL* pAccel=new ACCEL[dwCount];<br>        for(dw=0;dw<dwCount;dw++){<br>            pAccel[dw]=m_lpAccel[dw].accel;<br>        }</p> <p>        m_hActAccel=CreateAcceleratorTable(pAccel,dwCount);</p> <p>        return TRUE;</p> <p>    }</p> <p>    catch(CFileException* e)<br>    {<br>        char buf[256];<br>        char buf2[512];<br>        int iError;<br>        iError=e->m_cause;<br>        e->GetErrorMessage(buf,256);<br>        sprintf(buf2,"浠庢枃浠?\"%s\" 涓姞杞?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄦ椂鍙戠敓閿欒!\n"<br>                     "閿?璇?鍙?%d\n"<br>                     "閿欒鎻忚堪:%s\n"<br>                     "鏄惁鐢熸垚榛樿鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛?\n\0",<br>                     strAccelFileName,iError,buf);<br>        if(IDYES==AfxMessageBox(buf2,MB_YESNO|MB_SYSTEMMODAL|MB_ICONSTOP|MB_DEFBUTTON1))<br>        {<br>            ASSERT(m_hActAccel==NULL);<br>            ASSERT(m_lpAccel==NULL);<br>            m_dwAccelCount=sizeof(accel)/sizeof(ACCEL);<br>            m_lpAccel=new ACCELITEM[m_dwAccelCount];<br>            memset(m_lpAccel,0,sizeof(ACCELITEM)*m_dwAccelCount);<br>            DWORD dwCmdStr=sizeof(strCmd)/sizeof(char[30]);<br>            for(DWORD dw=0;dw<m_dwAccelCount;dw++){<br>                m_lpAccel[dw].accel=accel[dw];<br>                strcpy(m_lpAccel[dw].cCmd,dw<dwCmdStr?strCmd[dw]:"Command Unknow");<br>            }<br>            <br>            m_hActAccel=CreateAcceleratorTable(accel,m_dwAccelCount);<br>            SaveAccel();<br>            return TRUE;<br>        }<br>        return FALSE;<br>    }<br>}</p> <p>銆銆鏈鍚庯紝鍦―estroyWindow()鍑芥暟澶撮儴澧炲姞瀵筍aveAccel()鍑芥暟鐨勮皟鐢細</p> <p>    SaveAccel();<br>    ...</p> <p>銆銆濂戒簡錛屼綘鑷繁鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>鏁版嵁宸茬粡鑳戒繚瀛樺湪鏂囦歡涓簡錛屽茍鑳戒粠涓紜姞杞姐傚鏋滄枃浠朵笉瀛樺湪鎴栫▼搴忚鍙栨椂鍙戠幇閿欒鍒欐彁閱掍綘鏄惁寤虹珛緙虹渷鐨?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛紝濡備綘紜鐨勮瘽鍒欑敓鎴愮己鐪佺殑<strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">鍔犻熼敭</strong>琛ㄥ茍绔嬪埢淇濆瓨鑷蟲枃浠朵腑銆?br>銆銆鐢變簬姘村鉤鏈夐檺錛屽叾涓毦鍏嶆湁璇紝嬈㈣繋鎵硅瘎鎸囨銆佸彂琛ㄤ綘鐨勬剰瑙併傛湰浜轟笉鑳滄劅嬋銆?br></p> <img src ="http://m.shnenglu.com/tgh621/aggbug/71821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2009-01-12 17:22 <a href="http://m.shnenglu.com/tgh621/archive/2009/01/12/71821.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓轟粈涔?char** 涓嶈兘鑷姩杞寲涓?const char** (杞? http://m.shnenglu.com/tgh621/archive/2008/11/11/66588.html澶ф搗澶ф搗Tue, 11 Nov 2008 03:23:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/11/11/66588.htmlhttp://m.shnenglu.com/tgh621/comments/66588.htmlhttp://m.shnenglu.com/tgh621/archive/2008/11/11/66588.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/66588.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/66588.html

涓嬈″伓鐒剁殑鎯呭喌涓嬫垜鍙戠幇浠ヤ笅浠g爜绔熺劧鏃犳硶琚紪璇戦氳繃錛堝鏋滀綘鐨勭紪璇戝櫒錛屾瘮濡俈C6鎴朧C2003錛屽厑璁稿畠緙栬瘧閫氳繃錛屾垜鎯充綘棣栧厛搴旇鎹釜緙栬瘧鍣紝姣斿GCC鎴朧C2005錛夛細
void foo( const char* [] ) { }
int main( void )
{
    char* s[2];
    foo( s );
}

綆鍖栨垚鏇翠竴鑸殑褰㈠紡鏄細
char** p1 = 0;
const char** p2 = p1;

閿欒鏄細invalid conversion from `char**' to `const char**'.

lostpencil鏇村姞浠旂粏錛屼嬌鐢–緙栬瘧鍣ㄧ粰鍑虹殑鏄竴涓鍛婏細
initialization from incompatible pointer type.

闅忓悗hpho緇欏嚭浜嗗悎鐞嗙殑瑙i噴錛屽悓鏃?a target=_blank>comp.lang.c++.moderated涓婄殑Ulrich Eckhardt涔熺敤浠g爜榪涜浜嗚鏄庛?/p>

鐢ㄤ唬鐮佹潵璇存槑鏈鐩磋浜嗭細
const char* s = "abc";
int main( void )
{
    char* p0 = 0;
    char** p1 = &p0;
    const char** p2 = p1;
// 鍏堝亣璁捐繖涓鍙ユ槸鍚堟硶鐨?( 嫻嬭瘯鏃訛紝鍙互鍏堝己鍒剁被鍨?strong style="COLOR: black; BACKGROUND-COLOR: #99ff99">杞?/strong>鍖栦竴涓?)
    *p2 = s;
    *p0 = 'A';
// 閫氳繃p0鍦ㄤ慨鏀逛笉搴旇琚慨鏀圭殑s錛岃繖鏄劇劧鍜?strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">const鐩歌繚鑳岋紝鍏惰繍琛岀粨鏋滀笉鍙煡銆?br>}




鐪嬩簡 **鐨?鎯沖埌鐨?br>tekyDec 29, 2005 -  Show original item

鐪嬪畬鍚?鏄庣櫧**璁茬殑涓轟粈涔?strong style="COLOR: black; BACKGROUND-COLOR: #a0ffff">char** 涓嶈兘鑷姩杞?/strong>鍖栦負 const char**,(鍘熸枃)浣嗗鎴戝獎鍝嶆渶娣辯殑鏄笅闈㈢殑璇?

==================================================================
char *p="abc" 鑳戒笉鑳界紪璇戦氳繃瑕佺湅浣犱嬌鐢ㄧ殑緙栬瘧鍣ㄣ傞壌浜庡ぇ閲忛仐鐣欎唬鐮佺殑瀛樺湪錛屽ぇ閮ㄥ垎緙栬瘧鍣ㄥ厑璁稿叾閫氳繃錛屾垨鑰呯粰涓鍛娿傚綋鐒訛紝紼嬪簭鍛樿嚜宸卞繀欏諱繚璇佺粷涓嶅幓淇敼鍏跺箋?

紼嬪簭鍛樹笉搴旇鍦ㄤ唬鐮佷腑鍑虹幇*p='A'榪欐牱鐨勮鍙ャ傝繖鏄綋鍒濈害瀹氬ソ浜嗙殑錛氱紪璇戝櫒鍏佽char *p="abc"閫氳繃錛岃岀▼搴忓憳淇濊瘉涓嶅幓淇敼瀹冦?
b. *p='A'緙栬瘧鏃跺簲璇ュ厑璁擱氳繃錛屽洜涓哄崟灝辮繖鏉¤鍙ヨ岃█錛屽畠瀹屽叏鍚堟硶銆?
c. 榪愯鏃?p='A'鑳戒笉鑳介氳繃瑕佺湅瀹為檯鐨勮繍琛岀幆澧冿紝鍖呮嫭浣犱嬌鐢ㄧ殑鎿嶄綔緋葷粺銆佺紪璇戝櫒銆佺紪璇戝櫒閫夐」 絳夌瓑錛屼竴鍙ヨ瘽錛屽叾榪愯緇撴灉鐢變笉寰椾綘錛屼笖涓嶅簲璇ョ敱浣犲幓鍏沖績錛屽洜涓鴻繖縐嶈涓烘湰韜凡緇忚繚鍙嶇害瀹氫簡銆?
==================================================================

宸ヤ綔鍏崇郴鍚?鐢–String 鍜宻tring鐢ㄧ殑澶浜?寰堝皯榪欐牱瀹氫箟瀛楃涓?char *p=“abcde“浜?br>鍖濅竴鐪?榪樹笉閫傚簲,:(,娓愭笎鐨勫洖鎯蟲墠鎯寵搗涓浜涙潵(鍝?榪樻槸澶敓鐤?璧跺揩鍐欎笅鏉?浠ュ悗鍒繕浜?

榪欐牱瀹氫箟鐨勫瓧絎︿覆char *p=“abcde“ ; char *p1=“123445667“;

姝e涓婇潰鎻愬埌鐨勬槸涓嶈兘鍐?*p='A',榪愯鐨勬椂鍊欎細鍑洪敊,鍚屾牱,strcpy(p,p1)涔熶細鍑洪敊鍝?

"abcde"瀛楃涓插彲浠ョ湅鍋氭槸涓父閲忓瓧絎︿覆浜?鏄笉鑳借淇敼鐨?

浣嗗鏋?char p[]=“abcde“ 榪欐牱瀹氫箟,灝辨病鏈夐棶棰?浣犲彲浠ヤ慨鏀?p='A',鍙涓嶈秺鐣屽氨ok.

騫朵笖鍙戠幇榪欐牱涓ょ瀹氫箟
char *p=“abcde“

char p[]=“abcde“

鍦ㄨ繍琛岀殑鏃跺?p鎸囧悜鐨勫湴鍧涔熶笉鏄竴鏍風殑,鍙char *p=“abcde“榪樻槸鏈夌壒孌婄殑澶勭悊 :),鍏蜂綋鎬庝箞澶勭悊灝變笉鐭ラ亾浜?楂樻墜璇鋒寚鏁?)


闅忕潃嫻嬭瘯,鍙堝彂鐜頒釜闂,鍙兘鏄釜鑰侀棶棰樹簡鍚?


int main(int argc, char* argv[])
{
 int t[10];
 char p1[7]="123456";
 const char *p2="1234567890123213123";
 
 int len(0);
 
  //*p1='C';  err

 len=strlen(p1);
 printf("%d\n",len);
 
 strcpy(p1,p2);   ///??????????
 
 printf("%s\n",p1);
 
 len=strlen(p1);
 
 printf("%d\n",len);
 return 0;
}

鎴戝畾涔夌殑鏄?涓瓧絎︽暟緇? 浣嗙敤strcpy鎶妏2鎷峰埌p1涓?p1鏄斁涓嶄笅鐨?浣嗙▼搴忓嵈姝e父鎵ц,warning ,err閮芥病鏈?榪愯涔熸甯?


杈撳嚭

6
1234567890123213123
19

搴旇鏄嬌鐢ㄥ唴瀛樿秺鐣屼簡闃??鎬庝箞浼氭甯歌繍琛屽憿?

闅鵑亾瀵逛簬鍐呭瓨瓚婄晫鐨勪嬌鐢?榪愭皵濂芥墠宕╂簝琛ㄧ幇鍑烘潵,榪愭皵涓嶅ソ灝辨甯歌繍琛??

posted on 2006-02-22 13:04 Vincent.Chen 闃呰(232) 璇勮(0)  緙栬緫  鏀惰棌 鎵灞炲垎綾? 鏉?/font>



澶ф搗 2008-11-11 11:23 鍙戣〃璇勮
]]>
銆愯漿銆戝悜浠繪剰榪涚▼娉ㄥ叆DLLhttp://m.shnenglu.com/tgh621/archive/2008/09/28/62974.html澶ф搗澶ф搗Sun, 28 Sep 2008 04:24:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/28/62974.htmlhttp://m.shnenglu.com/tgh621/comments/62974.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/28/62974.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/62974.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/62974.html鍙兘榪欏楂樻墜鏉ヨ宸茬粡鏄佹帀鐗欑殑涓滆タ浜?

榪樻槸鏉ヨ璇村師鐞嗘妸(鏈漢涔熸槸鑿滈笩鍟?!
榪滅▼娉ㄥ叆灝辨槸鍦ㄧ洰鏍囪繘紼嬩腑鐢╒irtualAllocEx鐢寵涓孌靛唴瀛?
鐒跺悗鐢╓riteProcessMemory鍑芥暟灝嗚嚜宸眃ll鐨勫畬鏁磋礬寰勫鍒跺埌榪滅▼榪涚▼涓?
鐒跺悗鍦↘ernel32涓綆桳oadLibraryA鐨勫湴鍧,鍐嶈皟鐢↙oadLibraryA鍑芥暟鍔犺澆榪滅▼dll,
騫跺湪CreateRemoteThread鍒涘緩榪滅▼榪涚▼!
Code Language : C
#include \"stdafx.h\"
#include \"windows.h\"
#include \"tlhelp32.h\"
#include \"stdio.h\"
#pragma comment(lib,\"ws2_32\")
 
int EnableDebugPriv(const char * name)//鎻愭彁鏉冨嚱鏁?br>{
  HANDLE hToken;
  TOKEN_PRIVILEGES tp;
  LUID luid;
  //鎵撳紑榪涚▼浠ょ墝鐜?br>  if(!OpenProcessToken(GetCurrentProcess(),
  TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
    &hToken))
  {
    MessageBox(NULL,\"OpenProcessToken Error!\",\"Error!\",MB_OK);
     return 1;
 }
 //鑾峰緱榪涚▼鏈湴鍞竴ID
 if(!LookupPrivilegeValue(NULL,name,&luid))
 {
   MessageBox(NULL,\"LookupPrivivlegeValue Error!\",\"Error\",MB_OK);
 }
 tp.PrivilegeCount=1;
 tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
 tp.Privileges[0].Luid=luid;
 //璋冩暣鏉冮檺
 if(!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
 {
   MessageBox(NULL,\"AdjustTokenPrivileges Error!\",\"Error\",MB_OK);
   return 1;
 }
 return 0;
}
BOOL injectit(const char *DllPath,const DWORD dwRemoteProcessld)//娉ㄥ叆涓誨嚱鏁?br>{
 HANDLE hrp;
 if(EnableDebugPriv(SE_DEBUG_NAME))
 {
   MessageBox(NULL,\"Add Privilege Error!\",\"Error\",MB_OK);
   return FALSE;
 }
 if((hrp=OpenProcess(PROCESS_CREATE_THREAD|//鍏佽榪滅▼鍒涘緩綰跨▼
   PROCESS_VM_OPERATION|//鍏佽榪滅▼VM鎿嶄綔
   PROCESS_VM_WRITE,//鍏佽榪滅▼VM鍐?br>   FALSE,dwRemoteProcessld))==NULL)
 {
   MessageBox(NULL,\"OpenProcess Error!\",\"Error\",MB_OK);
   return FALSE;
 }
 char *psLibFileRemote;
 //浣跨敤VirtualAllocEx鍑芥暟鍦ㄨ繙紼嬭繘紼嬬殑鍐呭瓨鍦板潃絀洪棿鍒嗛厤DLL鏂囦歡鍚嶇紦鍐?br> psLibFileRemote=(char *)VirtualAllocEx(hrp,NULL,lstrlen(DllPath)+1,
   MEM_COMMIT,PAGE_READWRITE);
 if(psLibFileRemote==NULL)
 {
   MessageBox(NULL,\"VirtualAllocEx Error!\",\"Error\",MB_OK);
   return FALSE;
 }
 //浣跨敤WriteProcessMemory鍑芥暟灝咲LL鐨勮礬寰勫悕澶嶅埗鍒拌繙紼嬬殑鍐呭瓨絀洪棿
 if(WriteProcessMemory(hrp,psLibFileRemote,(void *)DllPath,lstrlen(DllPath)+1,NULL)==0)
 {
   MessageBox(NULL,\"WriteProcessMemory Error!\",\"Error\",MB_OK);
   return FALSE;
 }
 //璁$畻LoadLibraryA鐨勫叆鍙e湴鍧
 PTHREAD_START_ROUTINE pfnStartAddr=(PTHREAD_START_ROUTINE)
   GetProcAddress(GetModuleHandle(TEXT(\"Kernel32\")),\"LoadLibraryA\");
 if(pfnStartAddr==NULL)
 {
   MessageBox(NULL,\"GetProcAddress Error!\",\"Error\",MB_OK);
   return FALSE;
 }
 //pfnStartAddr鍦板潃灝辨槸LoadLibraryA鐨勫叆鍙e湴鍧
 
 
 HANDLE hrt;
 if((hrt=CreateRemoteThread(hrp,
   NULL,
   0,
   pfnStartAddr,
   psLibFileRemote,
   0,
   NULL))==NULL)
 {
   MessageBox(NULL,\"CreateRemote Error!\",\"Error\",MB_OK);
   return FALSE;
 }
 return TRUE;
}
unsigned long getpid(char *pn)//寰楀埌榪涚▼pid
{
 BOOL b;
 HANDLE hnd;
 PROCESSENTRY32 pe;
 //寰楀埌榪涚▼蹇収
 hnd=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 pe.dwSize=sizeof(pe);
 b=Process32First(hnd,&pe);
 while(b)
 {
   if(strcmp(pn,pe.szExeFile)==0)
     return pe.th32ProcessID;
   b=Process32Next(hnd,&pe);
 }
}
 
int main(int argc, char* argv[])
{
 if(argc<2)
 {
   printf(\"++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\");
   printf(\"injectpro V1.0!\nAuthor:text QQ:52674548\nusage:\n injectpro.exe targetprocess youdll\n\");
   printf(\" eg:injectpro.exe iexplorer.exe c:\\youdll.dll\n\");
   printf(\"++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\");
   return 0;
 }
 EnableDebugPriv(SE_DEBUG_NAME);//鑷韓鎻愭潈
 DWORD pid=getpid(argv[1]);
 //printf(\"%d\",pid);
 if(pid==0)
   return 1;
   if(injectit(argv[2],pid))
   {
     printf(\"inject success!\");
   }
   else
   {
     printf(\"inject error!\");
   }
 return 0;
}

鏈瘒鏂囩珷鏉ユ簮浜?榛戝弽鍦ㄧ嚎-淇℃伅瀹夊叏絎竴绔?鍘熸枃閾炬帴錛?a >http://www.hf110.com/hack/hackprg/200809/203556.html



澶ф搗 2008-09-28 12:24 鍙戣〃璇勮
]]>
[杞琞鎬庢牱灝嗚嚜宸辯殑DLL鍔犺澆鍒癊xplorer.exehttp://m.shnenglu.com/tgh621/archive/2008/09/28/62966.html澶ф搗澶ф搗Sun, 28 Sep 2008 03:34:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/28/62966.htmlhttp://m.shnenglu.com/tgh621/comments/62966.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/28/62966.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/62966.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/62966.html




  鏈枃灝嗚璁轟竴縐嶅皢鍔ㄦ佽繛鎺ュ簱娉ㄥ叆鍒板叾浠栬繘紼嬩腑鐨勪竴縐嶆柊鏂規(guī)硶銆傚畠鐨勬濊礬涓庝嬌鐢ㄥ嚱鏁癈reateRemoteThread鐨勬柟娉曠浉綾諱技錛屽彧涓嶈繃鍙互浣跨敤鍦╓in9x,Win2k,WinXP絳夋搷浣滅郴緇熶笅銆傚湪榪欓噷鎴戜滑灝嗗悜璇昏呮紨紺烘垜浠槸濡備綍灝咲LL(InjectDll.dll)娉ㄥ叆鍒癊xplorer.exe榪涚▼涓紒





紼嬪簭鐨勬濊礬濡備笅

1錛氬緱鍒癊xplorer.exe榪涚▼涓換鎰忎竴涓嚎紼嬬殑ID.

2錛氭牴鎹繖涓嚎紼嬬殑ID錛屽緱鍒拌繖涓嚎紼嬬殑鍙ユ焺Handle

3錛氭寕璧瘋繖涓嚎紼嬶紝騫朵繚瀛樼嚎紼嬪綋鍓嶇殑“涓婁笅鏂?#8221;

4錛氭敼鍙樿繖涓嚎紼嬬殑EIP鎸囬拡錛屼嬌瀹冩寚鍚戞垜浠杞紻LL鐨勫嚱鏁幫紙InjectCodeFun錛夛紝鐒跺悗鎭㈠榪欎釜綰跨▼銆?br>
5錛氭垜浠殑瑁呰澆DLL鐨勫嚱鏁拌繍琛屽畬鎴愬悗錛屽啀嬈℃寕璧瘋繖涓嚎紼嬶紝浣跨敤鎴戜滑浠ュ墠淇濆瓨鐨?#8220;涓婁笅鏂?#8221;錛屾仮澶嶈繖涓嚎紼嬪埌瀹冭鏀瑰彉鍓嶇殑鐘舵侊紝騫剁戶緇繍琛屻?br>
緇忚繃涓婅堪鍑犱釜姝ラ錛孍xplorer.exe榪涚▼涓氨浼氭浛鎴戜滑瑁呰澆鎴戜滑鐨凞LL(InjectDll.dll)浜嗭紝鏈夎叮鐨勬槸Explorer.exe瀵規(guī)涓濇娌℃湁瀵熻浠諱綍寮傚父 錛?br>




涓嬮潰鎴戜滑灝嗚緇嗚В閲婁竴涓嬪浣曠紪紼嬪疄鐜頒笂榪拌繃紼嬨?br>
姝ラ1鐨勫疄鐜版槸寰堝鏄撶殑錛屾垜浠彧闇瑕佽皟鐢═oolHelp鐨勫嚱鏁板氨鍙互寰楀埌鎴戜滑鎵瑕佸緱錛岃繖閲屾垜浠氨涓嶈緇嗚鏄庝簡錛岃鍙傝冩簮浠g爜涓璆etProcessID, GetThreadID 涓や釜鍑芥暟銆?br>


姝ラ2灝辨瘮杈冮夯鐑︿簡錛屽湪Win9x涓病鏈夋彁渚涗竴涓嚱鏁板彲浠ョ敱Thread ID寰楀埌Thread Handle錛堝垢榪愮殑鏄疻in2K鎻愪緵榪欑鍔熻兘錛夈傚ソ鍦ㄦ垜浠湪鍥藉涓浜汢BS涓婂彲浠ユ壘鍒拌繖涓嚱鏁幫紝瀹冧嬌鐢ㄤ簡涓浜涙湭鍏紑鐨勭粨鏋勶紝鏈枃鐨勭洰鐨勪笉鏄璁鴻繖涓棶棰橈紝璇昏呭鏋滄湁鍏磋叮鐨勮瘽錛屽彲浠ュ弬鑰冩垜浠殑婧愪唬鐮丱penThread2鍑芥暟銆傝繖涓嚱鏁扮殑浣滅敤灝辨槸浼犲叆涓涓猅hread ID鍙傛暟榪斿洖鐩稿簲鐨?Thread Handle銆?br>


姝ラ3 鐨勫疄鐜頒篃鏄緢瀹規(guī)槗鍜岃鑼冪殑錛屾垜浠彲浠ョ敤SuspendThread錛孏etThreadContext絳塖DK鍑芥暟杞繪澗瀹屾垚銆?br>


姝ラ4 榪欎釜姝ラ鏄渶閲嶈鐨勬楠や簡銆備負浜嗚鏄庢柟渚匡紝鎴戜滑灝嗗紩鐢ㄦ垜浠簮浠g爜涓殑璇彞錛岃璇昏呭弬鑰冩簮浠g爜涓璉njectCodeIntoThread 鍑芥暟銆?br>
棣栧厛鏀瑰彉綰跨▼鐨凟IP鎸囬拡錛屾垜浠彲浠ョ敤涓嬪垪浠g爜瀹屾垚

ThreadContext.Eip = (DWORD)m_lpCodeBase;

SetThreadContext(m_hInjectThread,&ThreadContext)錛?br>
鍙橀噺m_lpCodeBase鎸囧悜鎴戜滑鐨勮杞紻LL鐨勫嚱鏁幫紙InjectCodeFun錛夌殑棣栧湴鍧銆?br>
榪欓噷鏈鍏抽敭鐨勯儴鍒嗘槸鎴戜滑濡備綍浜х敓鎴戜滑鐨勮杞紻LL鐨勫嚱鏁幫紙InjectCodeFun錛夈傛敞鎰忔垜浠笉鑳界畝鍗曞湴鍦ㄦ垜浠殑紼嬪簭閲屽啓涓涓嚱鏁幫紝鐒跺悗灝嗗畠鐨勯鍦板潃璧嬪肩粰EIP銆傝繖鏄洜涓鴻杞紻LL鐨勫嚱鏁版槸瑕佽繍琛屽湪Explorer.exe鍦板潃絀洪棿涓殑錛屽鏋滄垜浠嬌鐢ㄨ嚜宸卞湴鍧絀洪棿涓殑鍑芥暟鐨勮瘽錛岄偅涔堝繀鐒朵細瀵艱嚧緋葷粺宕╂簝銆傝В鍐崇殑鍔炴硶鏄皢鎴戜滑鍐欑殑瑁呰澆DLL鍑芥暟錛圛njectCodeFun錛夋斁鍦ㄦ墍鏈夌▼搴忓叡浜殑鍦板潃絀洪棿涓幓錛屽湪Win9x涓?x80000000 ~ 0xFFFFFFFF榪欐鍦板潃灝辨槸鎴戜滑鎯寵鐨勫叡浜湴鍧絀洪棿錛岄偅涔堝浣曞皢鎴戜滑鍐欑殑瑁呰澆DLL鍑芥暟鏀懼湪榪欐鍦板潃絀洪棿鍛?錛熸柟娉曟湁寰堝錛屾垜浠嬌鐢ㄤ竴縐嶈鑼冪殑鏂規(guī)硶“鍐呭瓨鏄犲儚鏂囦歡”鏉ヨВ鍐寵繖涓棶棰樸傛垜浠氳繃鍑芥暟CreateFileMapping鏉ュ垎閰嶄竴孌靛叡浜湴鍧絀洪棿錛岀劧鍚庡皢鎴戜滑鍐欑殑瑁呰澆DLL鍑芥暟鎷瘋礉鍒拌繖孌靛湴鍧絀洪棿涓幓銆傚叿浣撲唬鐮佽鍙傛簮浠g爜涓璉nitInject鍑芥暟銆?br>
鍦ㄦ垜浠啓鐨勮杞紻LL鍑芥暟錛圛njectCodeFun錛変腑榪樻湁涓や釜闂鎴戜滑闇瑕佽В閲婁竴涓嬶紝絎竴 鍦ㄨ繖涓嚱鏁頒腑鎴戜滑涓嶈兘浣跨敤浠諱綍鎴戜滑鑷繁紼嬪簭涓畾涔夌殑鍙橀噺錛岄亾鐞嗚窡涓婇潰璁茬殑涓鏍鳳紝鍥犱負鍦板潃絀洪棿涓嶅悓銆傝繕鏈夋垜浠笉鑳界洿鎺ヨ皟鐢ㄥ嚱鏁幫紝渚嬪鍦↖njectCodeFun涓洿鎺ヤ嬌鐢↙oadLibray銆傝繖鏄洜涓哄鏋滅洿鎺ヤ嬌鐢↙oadLibray閭d箞灝遍渶瑕佺粡榪囩▼搴忕殑Import琛紝璺寵漿涓涓嬫墠鑳藉埌杈劇湡姝g殑Windows鐨凩oadLibray鍑芥暟銆備絾鏄笉鍚岀殑榪涚▼鏈変笉鍚岀殑Import錛屾墍浠ユ垜浠笉鑳界洿鎺ヨ皟鐢ㄥ嚱鏁般傛垜浠彲浠ヤ嬌鐢ㄤ竴縐嶅彨鍋?#8220;鍔ㄦ佹瀯閫犲嚱鏁?#8221;鐨勬妧鏈潵鍒涘緩鎴戜滑鐨勫嚱鏁般傞鍏堢敤GetProcAddress寰楀埌鍑芥暟LoadLibray鐨勭洿鎺ュ湴鍧錛岀劧鍚庡湪璋冪敤LoadLibray鐨勫湴鏂癸紝浣跨敤涓涓壒孌婄殑鏁板瓧鏉ヤ唬鏇垮畠濡?0x11111111錛屾渶鍚庡湪灝嗘垜浠殑鍑芥暟鎷瘋礉鍒板叡浜湴鍧絀洪棿涔嬪悗錛屾悳绱㈠叡浜唴瀛樻壘鍒拌繖涓壒孌婃暟瀛楋紝鐢ㄦ垜浠厛鍓嶅緱鍒扮殑姝g‘鍦板潃鏇挎崲瀹冩棦鍙傜浜屼釜鏈夎叮鐨勭幇璞℃槸鎴戜滑鎵鍐欑殑瑁呰澆DLL鍑芥暟錛圛njectCodeFun錛夋槸涓嶅簲璇ヨ繑鍥炵殑銆傝繖鏄洜涓鴻繖涓嚱鏁版槸鍦‥xplorer鐨勭嚎紼嬩腑榪愯鐨勶紝鎴戜滑涓嶇煡閬撳爢鏍堢殑姝g‘鍐呭錛屼笉鐭ラ亾ESP鎵鎸囧悜鐨勫湴鍧鏄粈涔堬紝濡傛灉鍑芥暟榪斿洖鐨勮瘽錛屾垜浠皢澶卞幓瀵圭▼搴忕殑鎺у埗銆傛垜浠殑鍔炴硶鏄紝褰撹皟鐢ㄥ畬LoadLibray涔嬪悗錛屽悜鎴戜滑鐨勪富紼嬪簭鍙戦佷竴涓嚜瀹氫箟娑堟伅錛岄氬憡鎴戜滑鐨勭▼搴忓凡緇忓畬鎴愯杞戒換鍔★紝鐒跺悗璁╃嚎紼嬭繘鍏ユ寰幆鐘舵併?br>


姝ラ5褰撴垜浠殑紼嬪簭鎺ュ彈鍒頒簡鑷畾涔夋秷鎭悗錛屽氨浼氬啀嬈℃寕璧瘋繖涓嚎紼嬶紝鎶婃垜浠互鍓嶄繚瀛樼殑綰跨▼鐨?#8220;涓婁笅鏂?#8221;鐢ㄥ嚱鏁癝etThreadContext鎭㈠錛岀劧鍚庢仮澶嶈繍琛岃繖涓嚎紼嬨傜粨鏋滄槸Explorer.exe涓濇娌℃湁鎰熻鍒拌嚜宸辮涓柇榪囥?br>




浠ヤ笂灝辨槸鎴戜滑鎵浠嬬粛鐨勬柟娉曪紝璇昏呭彲浠ュ弬鑰冩垜浠殑婧愪唬鐮佹潵鍏蜂綋浜嗚В涓婅堪鏂規(guī)硶銆傛簮浠g爜鐨勫姛鑳芥槸灝嗘垜浠殑DLL(InjectDll.dll)娉ㄥ叆鍒癊xplorer.exe 涓紝鍦↖njectDll.dll涓垜浠垱寤轟簡涓涓柊鐨勭嚎紼嬶紝鐒跺悗鍦ㄥ睆騫曠殑宸︿笂瑙掓樉紺哄綋鍓嶇殑鏃墮棿銆傛簮浠g爜鍒嗕負Win9x鐗堟湰鍜學in2k鐗堟湰錛岃繖涓や釜鐗堟湰鐨勪富瑕佸樊鍒槸鍒嗛厤鍏變韓鍐呭瓨鐨勬柟娉曚笉鍚岃屽凡銆傛簮浠g爜宸茬粡鍦≒Wn98,PwinMe,Win2k,WinXP絳夋搷浣滅郴緇熶笅錛屼嬌鐢╒C6緙栬瘧閫氳繃銆?

澶ф搗 2008-09-28 11:34 鍙戣〃璇勮
]]>
UNICODE涓茶漿鎹㈡垚char綾誨瀷涓茬殑鍥涚鏂規(guī)硶[杞琞http://m.shnenglu.com/tgh621/archive/2008/09/27/62924.html澶ф搗澶ф搗Sat, 27 Sep 2008 10:11:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/27/62924.htmlhttp://m.shnenglu.com/tgh621/comments/62924.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/27/62924.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/62924.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/62924.html1. 璋冪敤 WideCharToMultiByte() API

int WideCharToMultiByte (
    UINT    CodePage,                
//1 Unicode緙栫爜鐨勫瓧絎﹂〉錛孶nicode緙栫爜鏈夊瓧絎﹂〉鐨勬蹇碉紝姣斿gb2312/936錛宐ig5/950絳?/span>
    DWORD   dwFlags,                //2 濡備綍澶勭悊澶嶅悎unicode瀛楃錛岃緇嗘煡google
    LPCWSTR lpWideCharStr,        //3 寰呰漿鎹㈢殑unicode涓?/span>
    int     cchWideChar,                //4 琛ㄧず鍙傛暟3鐨勯暱搴?nbsp; 浼犻?1琛ㄧず浠?x00緇撳熬
    LPSTR   lpMultiByteStr,            //5 鎺ュ彈杞崲鍚庣殑涓茬殑瀛楃緙撳啿
    int     cbMultiByte,                    //6 琛ㄧず鍙傛暟5lpMutiByteStr鐨勫瓧鑺傚ぇ灝?nbsp;閫氬父sizeof涓涓?/span>
    LPCSTR  lpDefaultChar,        //7 NULL 鍏蜂綋google
    LPBOOL  lpUsedDefaultChar//8 NULL 鍏蜂綋google
);

2. 璋冪敤CRT鍑芥暟wcstombs()

size_t wcstombs (
    
char*          mbstr,
    
const wchar_t* wcstr,
    size_t         count );

3. 浣跨敤CString鏋勯犲櫒鎴栬祴鍊兼搷浣?/p>

// 鍋囪鏈変竴涓猆nicode涓瞱szSomeString

CString str1 ( wszSomeString ); 
// 鐢ㄦ瀯閫犲櫒杞崲
CString str2;

str2 
= wszSomeString; // 鐢ㄨ祴鍊兼搷浣滆漿鎹?/span>

4. 浣跨敤ATL涓茶漿鎹㈠畯

#include <atlconv.h>

// 榪樻槸鍋囪鏈変竴涓猆nicode涓瞱szSomeString

{
    
char szANSIString [MAX_PATH];
    USES_CONVERSION; 
// 澹版槑榪欎釜瀹忚浣跨敤鐨勫眬閮ㄥ彉閲?/span>

    lstrcpy ( szANSIString, OLE2A(wszSomeString) );
}



澶ф搗 2008-09-27 18:11 鍙戣〃璇勮
]]>
鑷粯鎸夐挳琛ラ仐銆愯漿銆?/title><link>http://m.shnenglu.com/tgh621/archive/2008/09/25/62779.html</link><dc:creator>澶ф搗</dc:creator><author>澶ф搗</author><pubDate>Thu, 25 Sep 2008 12:19:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2008/09/25/62779.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/62779.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2008/09/25/62779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/62779.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/62779.html</trackback:ping><description><![CDATA[     鎽樿:   <a href='http://m.shnenglu.com/tgh621/archive/2008/09/25/62779.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/tgh621/aggbug/62779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">澶ф搗</a> 2008-09-25 20:19 <a href="http://m.shnenglu.com/tgh621/archive/2008/09/25/62779.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瑙e喅Visual C++ 緙栬瘧鍣ㄤ腑娣峰悎 .c 鏂囦歡鏃舵敹鍒?C1853 棰勭紪璇戝ご閿欒鐨勬柟娉曪紙杞級http://m.shnenglu.com/tgh621/archive/2008/09/25/62764.html澶ф搗澶ф搗Thu, 25 Sep 2008 08:02:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/25/62764.htmlhttp://m.shnenglu.com/tgh621/comments/62764.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/25/62764.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/62764.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/62764.html闃呰鍏ㄦ枃

澶ф搗 2008-09-25 16:02 鍙戣〃璇勮
]]>
瀛楃涓茶漿鎹BSTR/LPSTR/LPWSTR/Char http://m.shnenglu.com/tgh621/archive/2008/09/02/60729.html澶ф搗澶ф搗Tue, 02 Sep 2008 10:20:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/09/02/60729.htmlhttp://m.shnenglu.com/tgh621/comments/60729.htmlhttp://m.shnenglu.com/tgh621/archive/2008/09/02/60729.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/60729.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/60729.html涓銆丅STR銆丩PSTR鍜孡PWSTR
鍦╒isual C++.NET鐨勬墍鏈夌紪紼嬫柟寮忎腑錛屾垜浠父甯歌鐢ㄥ埌榪欐牱鐨勪竴浜涘熀鏈瓧絎︿覆綾誨瀷錛屽BSTR銆丩PSTR鍜孡PWSTR絳夈備箣鎵浠ュ嚭鐜扮被浼間笂榪扮殑榪欎簺鏁版嵁綾誨瀷錛屾槸鍥犱負涓嶅悓緙栫▼璇█涔嬮棿鐨勬暟鎹氦鎹互鍙婂ANSI銆乁nicode鍜屽瀛楄妭瀛楃闆?MBCS)鐨勬敮鎸併?/p>

銆銆閭d箞浠涔堟槸BSTR銆丩PSTR浠ュ強LPWSTR鍛紵

銆銆BSTR(Basic STRing錛孊asic瀛楃涓?鏄竴涓狾LECHAR*綾誨瀷鐨刄nicode瀛楃涓層傚畠琚弿榪版垚涓涓笌鑷姩鍖栫浉鍏煎鐨勭被鍨嬨傜敱浜庢搷浣滅郴緇熸彁渚涚浉搴旂殑API鍑芥暟(濡係ysAllocString)鏉ョ鐞嗗畠浠ュ強涓浜涢粯璁ょ殑璋冨害浠g爜錛屽洜姝STR瀹為檯涓婂氨鏄竴涓狢OM瀛楃涓詫紝浣嗗畠鍗村湪鑷姩鍖栨妧鏈互澶栫殑澶氱鍦哄悎涓嬪緱鍒板箍娉涗嬌鐢ㄣ傚浘1鎻忚堪浜咮STR鐨勭粨鏋勶紝鍏朵腑DWORD鍊兼槸瀛楃涓蹭腑瀹為檯鎵鍗犵敤鐨勫瓧鑺傛暟錛屼笖瀹冪殑鍊兼槸瀛楃涓蹭腑Unicode瀛楃鐨勪袱鍊嶃?/p>

銆銆LPSTR鍜孡PWSTR鏄疻in32鍜孷C++鎵浣跨敤鐨勪竴縐嶅瓧絎︿覆鏁版嵁綾誨瀷銆侺PSTR琚畾涔夋垚鏄竴涓寚鍚戜互NULL(‘\0’)緇撳熬鐨?浣岮NSI瀛楃鏁扮粍鎸囬拡錛岃孡PWSTR鏄竴涓寚鍚戜互NULL緇撳熬鐨?6浣嶅弻瀛楄妭瀛楃鏁扮粍鎸囬拡銆傚湪VC++涓紝榪樻湁綾諱技鐨勫瓧絎︿覆綾誨瀷錛屽LPTSTR銆丩PCTSTR絳夛紝瀹冧滑鐨勫惈涔夊鍥?鎵紺恒?/p>

銆銆渚嬪錛孡PCTSTR鏄寚“long pointer to a constant generic string”錛岃〃紺?#8220;涓涓寚鍚戜竴鑸瓧絎︿覆甯擱噺鐨勯暱鎸囬拡綾誨瀷”錛屼笌C/C++鐨刢onst char*鐩告槧灝勶紝鑰孡PTSTR鏄犲皠涓?char*銆?/p>

銆銆涓鑸湴錛岃繕鏈変笅鍒楃被鍨嬪畾涔夛細

#ifdef UNICODE
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif

浜屻丆String銆丆StringA 鍜?CStringW

銆銆Visual C++.NET涓皢CStringT浣滀負ATL鍜孧FC鐨勫叡浜殑“涓鑸?#8221;瀛楃涓茬被錛屽畠鏈塁String銆丆StringA鍜孋StringW涓夌褰㈠紡錛屽垎鍒搷浣滀笉鍚屽瓧絎︾被鍨嬬殑瀛楃涓層傝繖浜涘瓧絎︾被鍨嬫槸TCHAR銆乧har鍜寃char_t銆俆CHAR鍦║nicode騫沖彴涓瓑鍚屼簬WCHAR(16浣峌nicode瀛楃)錛屽湪ANSI涓瓑浠蜂簬char銆倃char_t閫氬父瀹氫箟涓簎nsigned short銆傜敱浜嶤String鍦∕FC搴旂敤紼嬪簭涓粡甯哥敤鍒幫紝榪欓噷涓嶅啀閲嶅銆?/p>

涓夈乂ARIANT銆丆OleVariant 鍜宊variant_t

銆銆鍦∣LE銆丄ctiveX鍜孋OM涓紝VARIANT鏁版嵁綾誨瀷鎻愪緵浜嗕竴縐嶉潪甯告湁鏁堢殑鏈哄埗錛岀敱浜庡畠鏃㈠寘鍚簡鏁版嵁鏈韓錛屼篃鍖呭惈浜嗘暟鎹殑綾誨瀷錛屽洜鑰屽畠鍙互瀹炵幇鍚勭涓嶅悓鐨勮嚜鍔ㄥ寲鏁版嵁鐨勪紶杈撱備笅闈㈣鎴戜滑鏉ョ湅鐪婳AIDL.H鏂囦歡涓璙ARIANT瀹氫箟鐨勪竴涓畝鍖栫増錛?/p>

struct tagVARIANT {
VARTYPE vt;
union {
short iVal; // VT_I2.
long lVal; // VT_I4.
float fltVal; // VT_R4.
double dblVal; // VT_R8.
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.

short * piVal; // VT_BYREF|VT_I2.
long * plVal; // VT_BYREF|VT_I4.
float * pfltVal; // VT_BYREF|VT_R4.
double * pdblVal; // VT_BYREF|VT_R8.
DATE * pdate; // VT_BYREF|VT_DATE.
BSTR * pbstrVal; // VT_BYREF|VT_BSTR.
};
};

銆銆鏄劇劧錛孷ARIANT綾誨瀷鏄竴涓狢緇撴瀯錛屽畠鍖呭惈浜嗕竴涓被鍨嬫垚鍛榲t銆佷竴浜涗繚鐣欏瓧鑺備互鍙婁竴涓ぇ鐨剈nion綾誨瀷銆備緥濡傦紝濡傛灉vt涓篤T_I2錛岄偅涔堟垜浠彲浠ヤ粠iVal涓鍑篤ARIANT鐨勫箋傚悓鏍鳳紝褰撶粰涓涓猇ARIANT鍙橀噺璧嬪兼椂錛屼篃瑕佸厛鎸囨槑鍏剁被鍨嬨備緥濡傦細

VARIANT va;
:: VariantInit(&va); // 鍒濆鍖?br>int a = 2002;
va.vt = VT_I4; // 鎸囨槑long鏁版嵁綾誨瀷
va.lVal = a; // 璧嬪?/p>

銆銆涓轟簡鏂逛究澶勭悊VARIANT綾誨瀷鐨勫彉閲忥紝Windows榪樻彁渚涗簡榪欐牱涓浜涢潪甯告湁鐢ㄧ殑鍑芥暟錛?/p>

銆銆VariantInit 鈥斺?灝嗗彉閲忓垵濮嬪寲涓篤T_EMPTY錛?/p>

銆銆VariantClear 鈥斺?娑堥櫎騫跺垵濮嬪寲VARIANT錛?/p>

銆銆VariantChangeType 鈥斺?鏀瑰彉VARIANT鐨勭被鍨嬶紱

銆銆VariantCopy 鈥斺?閲婃斁涓庣洰鏍嘨ARIANT鐩歌繛鐨勫唴瀛樺茍澶嶅埗婧怴ARIANT銆?/p>

銆銆COleVariant綾繪槸瀵筕ARIANT緇撴瀯鐨勫皝瑁呫傚畠鐨勬瀯閫犲嚱鏁板叿鏈夋瀬涓哄己澶уぇ鐨勫姛鑳斤紝褰撳璞℃瀯閫犳椂棣栧厛璋冪敤VariantInit榪涜鍒濆鍖栵紝鐒跺悗鏍規(guī)嵁鍙傛暟涓殑鏍囧噯綾誨瀷璋冪敤鐩稿簲鐨勬瀯閫犲嚱鏁幫紝騫朵嬌鐢╒ariantCopy榪涜杞崲璧嬪兼搷浣滐紝褰揤ARIANT瀵硅薄涓嶅湪鏈夋晥鑼冨洿鏃訛紝瀹冪殑鏋愭瀯鍑芥暟灝變細琚嚜鍔ㄨ皟鐢紝鐢變簬鏋愭瀯鍑芥暟璋冪敤浜哣ariantClear錛屽洜鑰岀浉搴旂殑鍐呭瓨灝變細琚嚜鍔ㄦ竻闄ゃ傞櫎姝や箣澶栵紝COleVariant鐨勮祴鍊兼搷浣滅鍦ㄤ笌VARIANT綾誨瀷杞崲涓負鎴戜滑鎻愪緵鏋佸ぇ鐨勬柟渚褲備緥濡備笅闈㈢殑浠g爜錛?/p>

COleVariant v1("This is a test"); // 鐩存帴鏋勯?br>COleVariant v2 = "This is a test";
// 緇撴灉鏄疺T_BSTR綾誨瀷錛屽間負"This is a test"
COleVariant v3((long)2002);
COleVariant v4 = (long)2002;
// 緇撴灉鏄疺T_I4綾誨瀷錛屽間負2002

銆銆_variant_t鏄竴涓敤浜嶤OM鐨刅ARIANT綾伙紝瀹冪殑鍔熻兘涓嶤OleVariant鐩鎬技銆備笉榪囧湪Visual C++.NET鐨凪FC搴旂敤紼嬪簭涓嬌鐢ㄦ椂闇瑕佸湪浠g爜鏂囦歡鍓嶉潰娣誨姞涓嬪垪涓ゅ彞錛?/p>

銆銆#include "comutil.h"

銆銆#pragma comment( lib, "comsupp.lib" )

鍥涖丆ComBSTR鍜宊bstr_t

銆銆CComBSTR鏄BSTR鏁版嵁綾誨瀷灝佽鐨勪竴涓狝TL綾伙紝瀹冪殑鎿嶄綔姣旇緝鏂逛究銆備緥濡傦細

CComBSTR bstr1;
bstr1 = "Bye"; // 鐩存帴璧嬪?br>OLECHAR* str = OLESTR("ta ta"); // 闀垮害涓?鐨勫瀛楃
CComBSTR bstr2(wcslen(str)); // 瀹氫箟闀垮害涓?
wcscpy(bstr2.m_str, str); // 灝嗗瀛楃涓插鍒跺埌BSTR涓?br>CComBSTR bstr3(5, OLESTR("Hello World"));
CComBSTR bstr4(5, "Hello World");
CComBSTR bstr5(OLESTR("Hey there"));
CComBSTR bstr6("Hey there");
CComBSTR bstr7(bstr6);
// 鏋勯犳椂澶嶅埗錛屽唴瀹逛負"Hey there"

銆銆_bstr_t鏄槸C++瀵笲STR鐨勫皝瑁咃紝瀹冪殑鏋勯犲拰鏋愭瀯鍑芥暟鍒嗗埆璋冪敤SysAllocString鍜孲ysFreeString鍑芥暟錛屽叾浠栨搷浣滄槸鍊熺敤BSTR API鍑芥暟銆備笌_variant_t鐩鎬技錛屼嬌鐢ㄦ椂涔熻娣誨姞comutil.h鍜宑omsupp.lib銆?/p>

浜斻丅STR銆乧har*鍜孋String杞崲

銆銆(1) char*杞崲鎴怌String

銆銆鑻ュ皢char*杞崲鎴怌String錛岄櫎浜嗙洿鎺ヨ祴鍊煎錛岃繕鍙嬌鐢–String::Format榪涜銆備緥濡傦細

char chArray[] = "This is a test";
char * p = "This is a test";

銆銆鎴?/p>

LPSTR p = "This is a test";

銆銆鎴栧湪宸插畾涔塙nicode搴旂殑鐢ㄧ▼搴忎腑

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

銆銆鎴?/p>

LPTSTR p = _T("This is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;

銆銆(2) CString杞崲鎴恈har*

銆銆鑻ュ皢CString綾昏漿鎹㈡垚char*(LPSTR)綾誨瀷錛屽父甯鎬嬌鐢ㄤ笅鍒椾笁縐嶆柟娉曪細

銆銆鏂規(guī)硶涓錛屼嬌鐢ㄥ己鍒惰漿鎹€備緥濡傦細

CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

銆銆鏂規(guī)硶浜岋紝浣跨敤strcpy銆備緥濡傦細

CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);

銆銆闇瑕佽鏄庣殑鏄紝strcpy(鎴栧彲縐誨糢nicode/MBCS鐨刜tcscpy)鐨勭浜屼釜鍙傛暟鏄?const wchar_t* (Unicode)鎴朿onst char* (ANSI)錛岀郴緇熺紪璇戝櫒灝嗕細鑷姩瀵瑰叾榪涜杞崲銆?/p>

銆銆鏂規(guī)硶涓夛紝浣跨敤CString::GetBuffer銆備緥濡傦細

CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 鍦ㄨ繖閲屾坊鍔犱嬌鐢╬鐨勪唬鐮?br>if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 浣跨敤瀹屽悗鍙婃椂閲婃斁錛屼互渚胯兘浣跨敤鍏跺畠鐨凜String鎴愬憳鍑芥暟

銆銆(3) BSTR杞崲鎴恈har*

銆銆鏂規(guī)硶涓錛屼嬌鐢–onvertBSTRToString銆備緥濡傦細

#include "comutil.h"
#pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _TCHAR* argv[]){
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); // 鐢ㄥ畬閲婃斁
delete[] lpszText2;
return 0;
}

   ** 姝ゆ柟娉曚笉濂斤紝浼氶犳垚鍐呭瓨娉勯湶錛孲ysFreeString涔熸病鏈夋晥鏋溿?/font>

銆銆鏂規(guī)硶浜岋紝浣跨敤_bstr_t鐨勮祴鍊艱繍綆楃閲嶈澆銆備緥濡傦細

_bstr_t b = bstrText;
char* lpszText2 = b;   

* 涓嶄細鏈夊唴瀛樻硠闇詫紝鎺ㄨ崘鏂規(guī)硶

銆銆(4) char*杞崲鎴怋STR

銆銆鏂規(guī)硶涓錛屼嬌鐢⊿ysAllocString絳堿PI鍑芥暟銆備緥濡傦細

BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
BSTR bstrText = ::SysAllocStringByteLen("Test",4);

銆銆鏂規(guī)硶浜岋紝浣跨敤COleVariant鎴朹variant_t銆備緥濡傦細

//COleVariant strVar("This is a test");
_variant_t strVar("This is a test");
BSTR bstrText = strVar.bstrVal;

銆銆鏂規(guī)硶涓夛紝浣跨敤_bstr_t錛岃繖鏄竴縐嶆渶綆鍗曠殑鏂規(guī)硶銆備緥濡傦細

BSTR bstrText = _bstr_t("This is a test");

銆銆鏂規(guī)硶鍥涳紝浣跨敤CComBSTR銆備緥濡傦細

BSTR bstrText = CComBSTR("This is a test");

銆銆鎴?/p>

CComBSTR bstr("This is a test");
BSTR bstrText = bstr.m_str;

銆銆鏂規(guī)硶浜旓紝浣跨敤ConvertStringToBSTR銆備緥濡傦細

char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);

銆銆(5) CString杞崲鎴怋STR

銆銆閫氬父鏄氳繃浣跨敤CStringT::AllocSysString鏉ュ疄鐜般備緥濡傦細

CString str("This is a test");
BSTR bstrText = str.AllocSysString();

SysFreeString(bstrText); // 鐢ㄥ畬閲婃斁

銆銆(6) BSTR杞崲鎴怌String

銆銆涓鑸彲鎸変笅鍒楁柟娉曡繘琛岋細

BSTR bstrText = ::SysAllocString(L"Test");
CStringA str;
str.Empty();
str = bstrText;

銆銆鎴?/p>

CStringA str(bstrText);

銆銆(7) ANSI銆乁nicode鍜屽瀛楃涔嬮棿鐨勮漿鎹?/p>

銆銆鏂規(guī)硶涓錛屼嬌鐢∕ultiByteToWideChar灝咥NSI瀛楃杞崲鎴怳nicode瀛楃錛屼嬌鐢╓ideCharToMultiByte灝哢nicode瀛楃杞崲鎴怉NSI瀛楃銆?/p>

銆銆鏂規(guī)硶浜岋紝浣跨敤“_T”灝咥NSI杞崲鎴?#8220;涓鑸?#8221;綾誨瀷瀛楃涓詫紝浣跨敤“L”灝咥NSI杞崲鎴怳nicode錛岃屽湪鎵樼C++鐜涓繕鍙嬌鐢⊿灝咥NSI瀛楃涓茶漿鎹㈡垚String*瀵硅薄銆備緥濡傦細

TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”;

銆銆鏂規(guī)硶涓夛紝浣跨敤ATL 7.0鐨勮漿鎹㈠畯鍜岀被銆侫TL7.0鍦ㄥ師鏈?.0鍩虹涓婂畬鍠勫拰澧炲姞浜嗚澶氬瓧絎︿覆杞崲瀹忎互鍙婃彁渚涚浉搴旂殑綾伙紝瀹冨叿鏈夊鍥?鎵紺虹殑緇熶竴褰㈠紡錛?/p>

銆銆鍏朵腑錛岀涓涓狢琛ㄧず“綾?#8221;錛屼互渚夸簬ATL 3.0瀹忕浉鍖哄埆錛岀浜屼釜C琛ㄧず甯擱噺錛?琛ㄧず“to”錛孍X琛ㄧず瑕佸紑杈熶竴瀹氬ぇ灝忕殑緙撳啿銆係ourceType鍜孌estinationType鍙互鏄疉銆乀銆乄鍜孫LE錛屽叾鍚箟鍒嗗埆鏄疉NSI銆乁nicode銆?#8220;涓鑸?#8221;綾誨瀷鍜孫LE瀛楃涓層備緥濡傦紝CA2CT灝辨槸灝咥NSI杞崲鎴愪竴鑸被鍨嬬殑瀛楃涓插父閲忋備笅闈㈡槸涓浜涚ず渚嬩唬鐮侊細

LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);



澶ф搗 2008-09-02 18:20 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              99热精品在线观看| 欧美日韩国语| 亚洲欧美bt| 国产精品另类一区| 午夜精品久久久久久| 久久躁狠狠躁夜夜爽| 亚洲欧洲精品一区二区三区波多野1战4| 久久动漫亚洲| 亚洲欧洲一区二区在线播放 | 久久亚洲一区| 亚洲黄色av一区| 欧美伊久线香蕉线新在线| 狠狠色噜噜狠狠狠狠色吗综合| 欧美bbbxxxxx| 午夜视频一区| 亚洲精品久久久久久下一站| 久久精品天堂| 夜夜精品视频一区二区| 狠狠色2019综合网| 国产精品成人一区二区艾草| 午夜精品久久久久久久99樱桃| 亚洲国产精品一区制服丝袜| 欧美伊人久久大香线蕉综合69| 亚洲日本aⅴ片在线观看香蕉| 国产欧美日韩综合一区在线播放 | 亚洲黄色性网站| 国产精品久久999| 欧美不卡视频一区| 午夜精品亚洲| 99riav久久精品riav| 欧美成人dvd在线视频| 欧美一乱一性一交一视频| 亚洲精品色图| 亚洲电影免费在线观看| 国产一区二区三区高清| 久久国产主播精品| 欧美日韩一区在线观看视频| 久久精彩视频| 亚洲一区精彩视频| 亚洲精选91| 亚洲大胆人体在线| 免播放器亚洲| 久久久噜噜噜久久狠狠50岁| 篠田优中文在线播放第一区| 国产精品99久久久久久久vr| 亚洲黄色av| 亚洲精品国产日韩| 亚洲日本va午夜在线影院| 在线看无码的免费网站| 在线日韩中文字幕| 亚洲国产三级| 亚洲免费大片| 99视频精品免费观看| 亚洲美女黄网| 日韩西西人体444www| 亚洲日韩视频| 日韩亚洲国产欧美| 亚洲午夜精品国产| 亚洲欧美日韩系列| 久久精品国产在热久久| 久久精品亚洲| 欧美成人激情视频免费观看| 欧美大片91| 亚洲激情另类| 中文亚洲视频在线| 亚洲在线视频观看| 久久丁香综合五月国产三级网站| 久久久久高清| 欧美久久一区| 国产欧美日韩精品a在线观看| 国产日韩在线视频| 亚洲激情成人在线| 中文精品视频| 久久国产色av| 欧美国产精品v| 在线视频亚洲| 久久婷婷影院| 欧美日韩在线影院| 国内外成人免费激情在线视频 | 亚洲精选视频在线| 亚洲综合电影| 美女精品在线| 一本色道久久88综合日韩精品 | 亚洲美女中文字幕| 亚洲欧美日韩成人高清在线一区| 欧美一区二区视频在线观看| 美腿丝袜亚洲色图| 一区二区精品| 亚洲第一天堂无码专区| 夜夜嗨av一区二区三区免费区| 亚洲一区二区欧美日韩| 久久久久久久国产| 亚洲精品日本| 久久久久久久激情视频| 欧美日韩一级视频| 亚洲动漫精品| 久久精品卡一| 亚洲视频在线观看一区| 老鸭窝毛片一区二区三区| 国产精品福利在线| 亚洲第一区在线观看| 欧美在线观看网址综合| 亚洲国产美女| 欧美在线一级视频| 国产精品啊啊啊| 91久久久久久久久| 久久久www免费人成黑人精品| 亚洲国产精品久久人人爱蜜臀 | 国产精品久久97| 亚洲国产第一| 亚洲一区日韩| 欧美高清在线视频| 欧美一区二区视频在线观看| 欧美日韩欧美一区二区| 91久久国产精品91久久性色| 久久噜噜噜精品国产亚洲综合| 亚洲精品日本| 欧美屁股在线| 亚洲精品三级| 亚洲人成亚洲人成在线观看| 久久精品国产99国产精品| 国产欧美日韩不卡免费| 亚洲制服av| 亚洲天堂成人| 欧美午夜免费电影| 亚洲一区影音先锋| 9l国产精品久久久久麻豆| 欧美精品免费在线| 亚洲第一页在线| 亚洲电影免费在线| 欧美1级日本1级| 日韩午夜在线观看视频| 亚洲国产一区二区三区在线播| 母乳一区在线观看| 亚洲精品影院在线观看| 亚洲肉体裸体xxxx137| 欧美日韩精品一区二区天天拍小说 | 亚洲最新在线视频| 免费视频亚洲| 欧美一区二区三区四区在线观看地址| 99视频在线观看一区三区| 欧美日韩在线第一页| 国产精品99久久久久久久女警| 亚洲免费激情| 国产精品无人区| 久久中文欧美| 欧美日本国产视频| 午夜精品久久久久| 久久五月激情| 一本久久a久久精品亚洲| 亚洲无线视频| 在线成人h网| 日韩视频在线一区二区| 国产精品一区二区视频| 久久婷婷国产综合精品青草| 美女免费视频一区| 亚洲天天影视| 欧美一区二区三区久久精品茉莉花 | 国产精品午夜电影| 裸体女人亚洲精品一区| 欧美激情国产高清| 欧美一区二区免费观在线| 久久精品在线观看| 夜夜嗨av一区二区三区网站四季av| 亚洲天堂第二页| 亚洲国产日韩欧美在线动漫 | 久久婷婷人人澡人人喊人人爽| 一区二区日韩欧美| 久久狠狠亚洲综合| 亚洲一区在线免费观看| 久久综合九九| 久久电影一区| 欧美精品乱人伦久久久久久| 久久婷婷综合激情| 国产精品久久久久aaaa九色| 欧美成人国产va精品日本一级| 国产精品国内视频| 亚洲国产日韩欧美在线图片| 国产日韩欧美三级| 一本久道久久综合婷婷鲸鱼| 国产在线观看一区| 在线综合欧美| 一区二区三区高清视频在线观看| 久久久噜噜噜久久中文字免| 亚洲免费伊人电影在线观看av| 免费日韩av电影| 久久久久一区二区三区| 国产精品日韩在线观看| 亚洲欧洲精品一区二区精品久久久| 国产一区二区三区黄| 亚洲香蕉伊综合在人在线视看| 亚洲精品美女91| 久久综合久久综合久久综合| 久久久999精品视频| 国产精品一二一区| 亚洲伊人伊色伊影伊综合网| 亚洲一区二区伦理| 欧美三级电影精品| 日韩亚洲国产精品| 欧美午夜不卡视频|