锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美午夜免费电影,欧美国产日韩a欧美在线观看,欧美日韩成人免费http://m.shnenglu.com/zjj2816/category/2063.htmlzh-cnSun, 23 Nov 2008 18:31:47 GMTSun, 23 Nov 2008 18:31:47 GMT60濡備綍鍦ㄨ繍琛屾椂紜畾瀵硅薄綾誨瀷錛圧TTI錛?杞?/title><link>http://m.shnenglu.com/zjj2816/archive/2008/11/19/67286.html</link><dc:creator>浜曟硥</dc:creator><author>浜曟硥</author><pubDate>Wed, 19 Nov 2008 06:59:00 GMT</pubDate><guid>http://m.shnenglu.com/zjj2816/archive/2008/11/19/67286.html</guid><wfw:comment>http://m.shnenglu.com/zjj2816/comments/67286.html</wfw:comment><comments>http://m.shnenglu.com/zjj2816/archive/2008/11/19/67286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zjj2816/comments/commentRss/67286.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/zjj2816/services/trackbacks/67286.html</trackback:ping><description><![CDATA[RTTI 鏄?#8220;Runtime Type Information”鐨勭緝鍐欙紝鎰忔濇槸錛氳繍琛屾椂綾誨瀷淇℃伅銆傚畠鎻愪緵浜嗚繍琛屾椂紜畾瀵硅薄綾誨瀷鐨勬柟娉曘傛湰鏂囧皢綆鐣ヤ粙緇?RTTI 鐨勪竴浜涜儗鏅煡璇嗐佹弿榪? RTTI 鐨勬蹇碉紝騫墮氳繃鍏蜂綋渚嬪瓙鍜屼唬鐮佷粙緇嶄粈涔堟椂鍊欎嬌鐢ㄤ互鍙婂浣曚嬌鐢?RTTI錛涙湰鏂囪繕灝嗚緇嗘弿榪頒袱涓噸瑕佺殑 RTTI 榪愮畻絎︾殑浣跨敤鏂規硶錛屽畠浠槸 typeid 鍜?dynamic_cast銆?br>     鍏跺疄錛孯TTI 鍦–++涓茍涓嶆槸浠涔堟柊鐨勪笢瑗匡紝瀹冩棭鍦ㄥ崄澶氬勾浠ュ墠灝卞凡緇忓嚭鐜頒簡銆備絾鏄ぇ澶氭暟寮鍙戜漢鍛橈紝鍖呮嫭璁稿楂樺眰嬈$殑C++紼嬪簭鍛樺瀹冨茍涓嶆庝箞鐔熸倝錛屾洿涓嶇敤璇翠嬌鐢?RTTI 鏉ヨ璁″拰緙栧啓搴旂敤紼嬪簭浜嗐?br>     涓浜涢潰鍚戝璞′笓瀹跺湪浼犳挱鑷繁鐨勮璁$悊蹇墊椂錛屽ぇ澶氶兘涓誨紶鍦ㄨ璁″拰寮鍙戜腑鏄庢櫤鍦頒嬌鐢ㄨ櫄鎷熸垚鍛樺嚱鏁幫紝鑰屼笉鐢?RTTI 鏈哄埗銆備絾鏄紝鍦ㄥ緢澶氭儏鍐典笅錛岃櫄鎷熷嚱鏁版棤娉曞厠鏈嶆湰韜殑灞闄愩傛瘡姣忔秹鍙婂埌澶勭悊寮傜被瀹瑰櫒鍜屾牴鍩虹被灞傛錛堝 MFC錛夋椂錛屼笉鍙伩鍏嶈瀵瑰璞$被鍨嬭繘琛屽姩鎬佸垽鏂紝涔熷氨鏄姩鎬佺被鍨嬬殑渚︽祴銆傚浣曠‘瀹氬璞$殑鍔ㄦ佺被鍨嬪憿錛熺瓟妗堟槸浣跨敤鍐呭緩鐨? RTTI 涓殑榪愮畻絎︼細typeid 鍜?dynamic_cast銆?br>     棣栧厛璁╂垜浠潵璁捐涓涓被灞傛錛屽亣璁炬垜浠垱寤轟簡鏌愪釜澶勭悊鏂囦歡鐨勬娊璞″熀綾匯傚畠澹版槑涓嬪垪綰櫄鎷熷嚱鏁幫細open()銆乧lose()銆乺ead()鍜? write()錛? <pre>class File<br>{<br>public:<br> virtual int open(const string & filename)=0;<br> virtual int close(const string & filename)=0;<br> //<br> virtual ~File()=0; // 璁頒綇娣誨姞綰櫄鎷熸瀽鏋勫嚱鏁幫紙dtor錛?br>};</pre> 鐜板湪浠?File 綾繪淳鐢熺殑綾昏瀹炵幇鍩虹被鐨勭函铏氭嫙鍑芥暟錛屽悓鏃惰繕瑕佹彁渚涗竴浜涘叾浠栫殑鎿嶄綔銆傚亣璁炬淳鐢熺被涓?DiskFile錛岄櫎浜嗗疄鐜板熀綾葷殑綰櫄鎷熷嚱鏁板錛岃繕瑕佸疄鐜拌嚜宸辯殑flush()鍜宒efragment()鎿嶄綔錛? <pre>class DiskFile: public File<br>{<br>public:<br> int open(const string & filename);<br><br> // 瀹炵幇鍏朵粬鐨勭函铏氭嫙鍑芥暟<br> ......<br><br> // 鑷繁鐨勪笓鏈夋搷浣?br> virtual int flush();<br> virtual int defragment();<br>}; </pre> 鎺ョ潃錛屽張浠?DiskFile 綾繪淳鐢熶袱涓被錛屽亣璁句負 TextFile 鍜?MediaFile銆傚墠鑰呴拡瀵規枃鏈枃浠訛紝鍚庤呴拡瀵歸煶棰戝拰瑙嗛鏂囦歡錛? <pre>class TextFile: public DiskFile<br>{<br> // ......<br> int sort_by_words();<br>};<br><br>class MediaFile: public DiskFile<br>{<br> //......<br>}; </pre> 鎴戜滑涔嬫墍浠ヨ鍒涘緩榪欐牱鐨勭被灞傛錛屾槸鍥犱負榪欐牱鍋氫互鍚庡彲浠ュ垱寤哄鎬佸璞★紝濡傦細 <pre>File *pfile; // *pfile鐨勯潤鎬佺被鍨嬫槸 File<br>if(some_condition)<br> pfile = new TextFile; // 鍔ㄦ佺被鍨嬫槸 TextFile<br>else<br> pfile = new DiskFile; // 鍔ㄦ佺被鍨嬫槸 DiskFile </pre>     鍋囪浣犳鍦ㄥ紑鍙戜竴涓熀浜庡浘褰㈢敤鎴風晫闈紙GUI錛夌殑鏂囦歡綆$悊鍣紝姣忎釜鏂囦歡閮藉彲浠ヤ互鍥炬爣鏂瑰紡鏄劇ず銆傚綋榧犳爣縐誨埌鍥炬爣涓婂茍鍗曞嚮鍙抽敭鏃訛紝鏂囦歡綆$悊鍣ㄦ墦寮涓涓彍鍗曪紝姣? 涓枃浠墮櫎浜嗗叡鍚岀殑鑿滃崟欏癸紝涓嶅悓鐨勬枃浠剁被鍨嬭繕鏈変笉鍚岀殑鑿滃崟欏廣傚錛氬叡鍚岀殑鑿滃崟欏規湁“鎵撳紑”“鎷瘋礉”銆佸拰“綺樿創”錛屾澶栵紝榪樻湁涓浜涢拡瀵圭壒孌婃枃浠剁殑涓撻棬鎿嶄綔銆傛瘮 濡傦紝鏂囨湰鏂囦歡浼氭湁“緙栬緫”鎿嶄綔錛岃屽濯掍綋鏂囦歡鍒欎細鏈?#8220;鎾斁”鑿滃崟銆備負浜嗕嬌鐢?RTTI 鏉ュ姩鎬佸畾鍒惰彍鍗曪紝鏂囦歡綆$悊鍣ㄥ繀欏諱睛嫻嬫瘡涓枃浠剁殑鍔ㄦ佺被鍨嬨傚埄鐢? 榪愮畻絎?typeid 鍙互鑾峰彇涓庢煇涓璞″叧鑱旂殑榪愯鏃剁被鍨嬩俊鎭倀ypeid 鏈変竴涓弬鏁幫紝浼犻掑璞℃垨綾誨瀷鍚嶃傚洜姝わ紝涓轟簡紜畾 x 鐨勫姩鎬佺被鍨嬫槸涓嶆槸Y錛屽彲浠ョ敤琛ㄨ揪寮忥細typeid(x) == typeid(Y)瀹炵幇錛? <pre>#include <typeinfo> // typeid 闇瑕佺殑澶存枃浠?br>void menu::build(const File * pfile)<br>{<br> if (typeid(*pfile)==typeid(TextFile))<br> {<br> add_option("edit"); <br> }<br> else if (typeid(*pfile)==typeid(MediaFile))<br> {<br> add_option("play"); <br> }<br>} </pre>     浣跨敤 typeid 瑕佹敞鎰忎竴涓棶棰橈紝閭e氨鏄煇浜涚紪璇戝櫒錛堝 Visual C++錛夐粯璁ょ姸鎬佹槸紱佺敤 RTTI 鐨勶紝鐩殑鏄秷闄ゆц兘涓婄殑寮閿銆傚鏋滀綘鐨勭▼搴忕‘瀹炰嬌鐢ㄤ簡 RTTI錛屼竴瀹氳璁頒綇鍦ㄧ紪璇戝墠鍚敤 RTTI銆備嬌鐢?typeid 鍙兘浜х敓涓浜涘皢鏉ョ殑緇存姢闂銆傚亣璁句綘鍐沖畾鎵╁睍涓婅堪鐨勭被灞傛錛屼粠MediaFile 媧劇敓鍙︿竴涓彨 LocalizeMedia 鐨勭被錛岀敤榪欎釜綾昏〃紺哄甫鏈変笉鍚岃璦璇存槑鏂囧瓧鐨勫獟浣撴枃浠躲備絾 LocalizeMedia 鏈川涓婅繕鏄釜 MediaFile 綾誨瀷鐨勬枃浠躲傚洜姝わ紝褰撶敤鎴峰湪璇ョ被鏂囦歡鍥炬爣涓婂崟鍑誨彸閿椂錛屾枃浠剁鐞嗗櫒蹇呴』鎻愪緵涓涓?#8220;鎾斁”鑿滃崟銆傚彲鎯? build()鎴愬憳鍑芥暟浼氳皟鐢ㄥけ璐ワ紝鍘熷洜鏄綘娌℃湁媯鏌ヨ繖縐嶇壒瀹氱殑鏂囦歡綾誨瀷銆備負浜嗚В鍐寵繖涓棶棰橈紝浣犲繀欏昏薄涓嬮潰榪欐牱瀵?build() 鎵撹ˉ涓侊細 <pre>void menu::build(const File * pfile)<br>{<br><br> //......<br><br> else if (typeid(*pfile)==typeid(LocalizedMedia))<br> {<br> add_option("play"); <br> }<br>} </pre>     鍞夛紝榪欑鍋氭硶鐪熸槸鏄懼緱澶笟浣欎簡錛屼互鍚庢瘡嬈℃坊鍔犳柊鐨勭被錛屾鏃犵枒闂兘蹇呴』鎵撶被浼肩殑琛ヤ竵銆傛樉鐒訛紝榪欎笉鏄竴涓悊鎯崇殑瑙e喅鏂規銆傝繖涓椂鍊欐垜浠氨瑕佺敤鍒? dynamic_cast錛岃繖涓繍綆楃鐢ㄤ簬澶氭佺紪紼嬩腑淇濊瘉鍦ㄨ繍琛屾椂鍙戠敓姝g‘鐨勮漿鎹紙鍗崇紪璇戝櫒鏃犳硶楠岃瘉鏄惁鍙戠敓姝g‘鐨勮漿鎹級銆傜敤瀹冩潵紜畾鏌愪釜瀵硅薄鏄? MediaFile 瀵硅薄榪樻槸瀹冪殑媧劇敓綾誨璞°俤ynamic_cast 甯哥敤浜庝粠澶氭佺紪紼嬪熀綾繪寚閽堝悜媧劇敓綾繪寚閽堢殑鍚戜笅綾誨瀷杞崲銆傚畠鏈変袱涓弬鏁幫細涓涓槸綾誨瀷鍚嶏紱鍙︿竴涓槸澶氭佸璞$殑鎸囬拡鎴栧紩鐢ㄣ傚叾鍔熻兘鏄湪榪愯鏃跺皢瀵硅薄寮哄埗杞崲涓虹洰鏍囩被鍨嬪茍榪斿洖甯冨皵鍨嬬粨鏋溿備篃灝辨槸璇達紝濡傛灉璇ュ嚱鏁版垚鍔熷湴騫朵笖鏄姩鎬佺殑灝? *pfile 寮哄埗杞崲涓?MediaFile錛岄偅涔?pfile鐨勫姩鎬佺被鍨嬫槸 MediaFile 鎴栬呮槸瀹冪殑媧劇敓綾匯傚惁鍒欙紝pfile 鍒欎負鍏跺畠鐨勭被鍨嬶細 <pre>void menu::build(const File * pfile)<br>{<br> if (dynamic_cast <MediaFile *> (pfile))<br> {<br> // pfile 鏄?MediaFile 鎴栬呮槸MediaFile鐨勬淳鐢熺被 LocalizedMedia<br> add_option("play"); <br> }<br> else if (dynamic_cast <TextFile*> (pfile))<br> {<br> // pfile 鏄?TextFile 鏄疶extFile鐨勬淳鐢熺被<br> add_option("edit"); <br> }<br>} </pre>     緇嗙粏鎯充竴涓嬶紝铏界劧浣跨敤 dynamic_cast 紜疄寰堝ソ鍦拌В鍐充簡鎴戜滑鐨勯棶棰橈紝浣嗕篃闇瑕佹垜浠粯鍑轟唬浠鳳紝閭e氨鏄笌 typeid 鐩告瘮錛宒ynamic_cast 涓嶆槸涓涓父閲忔椂闂寸殑鎿嶄綔銆備負浜嗙‘瀹氭槸鍚﹁兘瀹屾垚寮哄埗綾誨瀷杞崲錛宒ynamic_cast`蹇呴』鍦ㄨ繍琛屾椂榪涜涓浜涜漿鎹㈢粏鑺傛搷浣溿傚洜姝ゅ湪浣跨敤 dynamic_cast 鎿嶄綔鏃訛紝搴旇鏉冭 瀵規ц兘鐨勫獎鍝嶃?img src ="http://m.shnenglu.com/zjj2816/aggbug/67286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zjj2816/" target="_blank">浜曟硥</a> 2008-11-19 14:59 <a href="http://m.shnenglu.com/zjj2816/archive/2008/11/19/67286.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>(杞?榪涚▼閫氫俊鏈哄埗http://m.shnenglu.com/zjj2816/archive/2007/12/13/38433.html浜曟硥浜曟硥Thu, 13 Dec 2007 07:50:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/12/13/38433.htmlhttp://m.shnenglu.com/zjj2816/comments/38433.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/12/13/38433.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/38433.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/38433.html1銆佸紩璦
鍦╓indows紼嬪簭涓紝鍚勪釜榪涚▼涔嬮棿甯稿父闇瑕佷氦鎹㈡暟鎹紝榪涜鏁版嵁閫氳銆俉IN32 API鎻愪緵浜?br>璁稿鍑芥暟浣挎垜浠兘澶熸柟渚塊珮鏁堢殑榪涜榪涚▼闂寸殑閫氳錛岄氳繃榪欎簺鍑芥暟鎴戜滑鍙互鎺у埗涓嶅悓榪?br>紼嬮棿鐨勬暟鎹氦鎹紝灝卞鍚屽湪WIN16涓鏈湴榪涚▼榪涜璇誨啓鎿嶄綔涓鏍楓?br>鍏稿瀷鐨刉IN16涓よ繘紼嬪彲浠ラ氳繃鍏變韓鍐呭瓨鏉ヨ繘琛屾暟鎹氦鎹細錛?錛夎繘紼婣灝咷lobalAlloc錛圙M
EM_SHARE...錛堿PI鍒嗛厤涓瀹氶暱搴︾殑鍐呭瓨錛涳紙2錛夎繘紼婣灝咷lobalAlloc鍑芥暟榪斿洖鐨勫彞鏌勪紶閫?br>緇欒繘紼婤錛堥氳繃涓涓櫥褰曟秷鎭級錛涳紙3錛夎繘紼婤瀵硅繖涓彞鏌勮皟鐢℅lobalLock鍑芥暟錛屽茍鍒╃敤G
lobalLock鍑芥暟榪斿洖鐨勬寚閽堣闂暟鎹傝繖縐嶆柟娉曞湪WIN32涓彲鑳藉け璐ワ紝榪欐槸鍥犱負GlobalLo
ck鍑芥暟榪斿洖鎸囧悜鐨勬槸榪涚▼A鐨勫唴瀛橈紝鐢變簬榪涚▼浣跨敤鐨勬槸铏氭嫙鍦板潃鑰岄潪瀹為檯鐗╃悊鍦板潃錛屽洜姝?br>榪欎竴鎸囬拡浠呬笌A榪涚▼鏈夊叧錛岃屼簬B榪涚▼鏃犲叧銆?br>鏈枃鎺㈣浜嗗嚑縐峎IN32涓嬭繘紼嬩箣闂撮氳鐨勫嚑縐嶅疄鐜版柟娉曪紝璇昏呭彲浠ヤ嬌鐢ㄤ笉鍚岀殑鏂規硶浠ヨ揪鍒?br>紼嬪簭榪愯楂樻晥鍙潬鐨勭洰鐨勩?br>2銆乄indows95涓繘紼嬬殑鍐呭瓨絀洪棿綆$悊
WIN32榪涚▼闂撮氳涓嶹indows95鐨勫唴瀛樼鐞嗘湁瀵嗗垏鍏崇郴錛岀悊瑙indows95鐨勫唴瀛樼鐞嗗鎴戜滑
濡備笅鐨勭▼搴忚璁″皢浼氭湁寰堝ぇ鐨勫府鍔╋紝涓嬮潰鎴戜滑璁ㄨ浠ヤ笅Windows95涓繘紼嬬殑鍐呭瓨絀洪棿綆$悊
銆?br>鍦╓IN16涓嬶紝鎵鏈塛indows搴旂敤紼嬪簭鍏變韓鍗曚竴鍦板潃錛屼換浣曡繘紼嬮兘鑳藉瀵硅繖涓絀洪棿涓睘浜庡叡
浜崟涓鐨勫湴鍧絀洪棿錛屼換浣曡繘紼嬮兘鑳藉瀵硅繖涓絀洪棿涓睘浜庡叾浠栬繘紼嬬殑鍐呭瓨榪涜璇誨啓鎿嶄綔錛?br>鐢氳嚦鍙互瀛樺彇鎿嶄綔緋葷粺鏈韓鐨勬暟鎹紝榪欐牱灝卞彲鑳界牬鍧忓叾浠栫▼搴忕殑鏁版嵁孌典唬鐮併?br>鍦╓IN32涓嬶紝姣忎釜榪涚▼閮芥湁鑷繁鐨勫湴鍧絀洪棿錛屼竴涓猈IN32榪涚▼涓嶈兘瀛樺彇鍙︿竴涓湴鍧鐨勭鏈?br>鏁版嵁錛屼袱涓繘紼嬪彲浠ョ敤鍏鋒湁鐩稿悓鍊肩殑鎸囬拡瀵誨潃錛屼絾鎵璇誨啓鐨勫彧鏄畠浠悇鑷殑鏁版嵁錛岃繖鏍?br>灝卞噺灝戜簡榪涚▼涔嬮棿鐨勭浉浜掑共鎵般傚彟涓鏂歸潰錛屾瘡涓猈IN32榪涚▼鎷ユ湁4GB鐨勫湴鍧絀洪棿錛屼絾騫朵笉
浠h〃瀹冪湡姝f嫢鏈?GB鐨勫疄闄呯墿鐞嗗唴瀛橈紝鑰屽彧鏄搷浣滅郴緇熷埄鐢–PU鐨勫唴瀛樺垎閰嶅姛鑳芥彁渚涚殑铏?br>鎷熷湴鍧絀洪棿銆傚湪涓鑸儏鍐典笅錛岀粷澶у鏁拌櫄鎷熷湴鍧騫舵病鏈夌墿鐞嗗唴瀛樹簬瀹冨搴旓紝鍦ㄧ湡姝e彲浠?br>浣跨敤榪欎簺鍦板潃絀洪棿涔嬪墠錛岃繕瑕佺敱鎿嶄綔緋葷粺鎻愪緵瀹為檯鐨勭墿鐞嗗唴瀛橈紙榪欎釜榪囩▼鍙?#8220;鎻愪氦”co
mmit錛夈傚湪涓嶅悓鐨勬儏鍐典笅錛岀郴緇熸彁浜ょ殑鐗╃悊鍐呭瓨鏄笉鍚岀殑錛屽彲鑳芥槸RAM錛屼篃鍙兘鏄‖鐩樻ā
鎷熺殑铏氭嫙鍐呭瓨銆?br>3銆乄IN32涓繘紼嬮棿鐨勯氳
鍦╓indows 95涓紝涓哄疄鐜拌繘紼嬮棿騫崇瓑鐨勬暟鎹氦鎹紝鐢ㄦ埛鍙互鏈夊涓嬪嚑縐嶉夋嫨錛?br>* 浣跨敤鍐呭瓨鏄犲皠鏂囦歡
* 閫氳繃鍏變韓鍐呭瓨DLL鍏變韓鍐呭瓨
* 鍚戝彟涓榪涚▼鍙戦乄M_COPYDATA娑堟伅
* 璋冪敤ReadProcessMemory浠ュ強WriteProcessMemory鍑芥暟錛岀敤鎴峰彲浠ュ彂閫佺敱GlobalLock(
GMEM_SHARE,...)鍑芥暟璋冪敤鎻愬彇鐨勫彞鏌勩丟lobalLock鍑芥暟榪斿洖鐨勬寚閽堜互鍙奦irtualAlloc鍑?br>鏁拌繑鍥炵殑鎸囬拡銆?br>3.1銆佸埄鐢ㄥ唴瀛樻槧灝勬枃浠跺疄鐜癢IN32榪涚▼闂寸殑閫氳
Windows95涓殑鍐呭瓨鏄犲皠鏂囦歡鐨勬満鍒朵負鎴戜滑楂樻晥鍦版搷浣滄枃浠舵彁渚涗簡涓縐嶉斿緞錛屽畠鍏佽鎴戜滑
鍦╓IN32榪涚▼涓繚鐣欎竴孌靛唴瀛樺尯鍩燂紝鎶婄洰鏍囨枃浠舵槧灝勫埌榪欐铏氭嫙鍐呭瓨涓傚湪紼嬪簭瀹炵幇涓繀
欏昏冭檻鍚勮繘紼嬩箣闂寸殑鍚屾銆傚叿浣撳疄鐜版楠ゅ涓嬶細
棣栧厛鎴戜滑鍦ㄥ彂閫佹暟鎹殑榪涚▼涓渶瑕侀氳繃璋冪敤鍐呭瓨鏄犲皠API鍑芥暟CreateFileMapping鍒涘緩涓
涓湁鍚嶇殑鍏變韓鍐呭瓨錛?br>HANDLE CreateFileMapping(
HANDLE hFile,    // 鏄犲皠鏂囦歡鐨勫彞鏌勶紝
//璁句負0xFFFFFFFF浠ュ垱寤轟竴涓繘紼嬮棿鍏變韓鐨勫璞?br>LPSECURITY_ATTRIBUTES lpFileMappingAttributes,    // 瀹夊叏灞炴?br>DWORD flProtect,    // 淇濇姢鏂瑰紡
DWORD dwMaximumSizeHigh,    //瀵硅薄鐨勫ぇ灝?br>DWORD dwMaximumSizeLow,
LPCTSTR lpName     // 蹇呴』涓烘槧灝勬枃浠跺懡鍚?br>);
涓庤櫄鎷熷唴瀛樼被浼鹼紝淇濇姢鏂瑰紡鍙互鏄疨AGE_READONLY鎴栨槸PAGE_READWRITE銆傚鏋滃榪涚▼閮藉
鍚屼竴鍏變韓鍐呭瓨榪涜鍐欒闂紝鍒欏繀欏諱繚鎸佺浉浜掗棿鍚屾銆傛槧灝勬枃浠惰繕鍙互鎸囧畾PAGE_WRITECO
PY鏍囧織錛屽彲浠ヤ繚璇佸叾鍘熷鏁版嵁涓嶄細閬埌鐮村潖錛屽悓鏃跺厑璁稿叾浠栬繘紼嬪湪蹇呰鏃惰嚜鐢辯殑鎿嶄綔鏁?br>鎹殑鎷瘋礉銆?br>鍦ㄥ垱寤烘枃浠舵槧灝勫璞″悗浣跨敤鍙互璋冪敤MapViewOfFile鍑芥暟鏄犲皠鍒版湰榪涚▼鐨勫湴鍧絀洪棿鍐呫?br>涓嬮潰璇存槑鍒涘緩涓涓悕涓篗ySharedMem鐨勯暱搴︿負4096瀛楄妭鐨勬湁鍚嶆槧灝勬枃浠訛細
HANDLE hMySharedMapFile=CreateFileMapping((HANDLE)0xFFFFFFFF)錛?br>NULL錛孭AGE_READWRITE錛?錛?x1000錛?MySharedMem")錛?br>騫舵槧灝勭紦瀛樺尯瑙嗗浘錛?br>LPSTR pszMySharedMapView=(LPSTR)MapViewOfFile(hMySharedMapFile錛?br>FILE_MAP_READ|FILE_MAP_WRITE錛?錛?錛?);
鍏朵粬榪涚▼璁塊棶鍏變韓瀵硅薄錛岄渶瑕佽幏寰楀璞″悕騫惰皟鐢∣penFileMapping鍑芥暟銆?br>HANDLE hMySharedMapFile=OpenFileMapping(FILE_MAP_WRITE錛?br>FALSE錛?MySharedMem");
涓鏃﹀叾浠栬繘紼嬭幏寰楁槧灝勫璞$殑鍙ユ焺錛屽彲浠ヨ薄鍒涘緩榪涚▼閭f牱璋冪敤MapViewOfFile鍑芥暟鏉ユ槧灝?br>瀵硅薄瑙嗗浘銆傜敤鎴峰彲浠ヤ嬌鐢ㄨ瀵硅薄瑙嗗浘鏉ヨ繘琛屾暟鎹鍐欐搷浣滐紝浠ヨ揪鍒版暟鎹氳鐨勭洰鐨勩?br>褰撶敤鎴瘋繘紼嬬粨鏉熶嬌鐢ㄥ叡浜唴瀛樺悗錛岃皟鐢║nmapViewOfFile鍑芥暟浠ュ彇娑堝叾鍦板潃絀洪棿鍐呯殑瑙嗗浘
錛?br>if (!UnmapViewOfFile(pszMySharedMapView))
{ AfxMessageBox("could not unmap view of file"); }
3.2銆佸埄鐢ㄥ叡浜唴瀛楧LL
鍏變韓鏁版嵁DLL鍏佽榪涚▼浠ョ被浼間簬Windows 3.1 DLL鍏變韓鏁版嵁鐨勬柟寮忚闂鍐欐暟鎹紝澶氫釜榪?br>紼嬮兘鍙互瀵硅鍏變韓鏁版嵁DLL榪涜鏁版嵁鎿嶄綔錛岃揪鍒板叡浜暟鎹殑鐩殑銆傚湪WIN32涓負寤虹珛鍏變韓
鍐呭瓨錛屽繀欏繪墽琛屼互涓嬫楠わ細
棣栧厛鍒涘緩涓涓湁鍚嶇殑鏁版嵁鍖恒傝繖鍦╒isual C++涓槸浣跨敤data_seg pragma瀹忋備嬌鐢╠ata_
seg pragma瀹忓繀欏繪敞鎰忔暟鎹殑鍒濆鍖栵細
#pragma data_seg("MYSEC")
char MySharedData[4096]={0};
#pragma data_seg()
鐒跺悗鍦ㄧ敤鎴風殑DEF鏂囦歡涓負鏈夊悕鐨勬暟鎹尯璁懼畾鍏變韓灞炴с?br>LIBRARY TEST
DATA READ WRITE
SECTIONS
    .MYSEC READ WRITE SHARED
榪欐牱姣忎釜闄勫睘浜嶥LL鐨勮繘紼嬮兘灝嗘帴鍙楀埌灞炰簬鑷繁鐨勬暟鎹嫹璐濓紝涓涓繘紼嬬殑鏁版嵁鍙樺寲騫朵笉浼?br>鍙嶆槧鍒板叾浠栬繘紼嬬殑鏁版嵁涓?br>鍦―EF鏂囦歡涓傚綋鍦拌緭鍑烘暟鎹備互涓嬬殑DEF鏂囦歡欏硅鏄庝簡濡備綍浠ュ父鏁板彉閲忕殑褰㈠紡杈撳嚭MySh
aredData銆?br>EXPORTS
    MySharedData CONSTANT
鏈鍚庡湪搴旂敤紼嬪簭錛堣繘紼嬶級鎸夊閮ㄥ彉閲忓紩鐢ㄥ叡浜暟鎹?br>extern _export"C"{char * MySharedData[];}
榪涚▼涓嬌鐢ㄨ鍙橀噺搴旀敞鎰忛棿鎺ュ紩鐢ㄣ?br>m_pStatic=(CEdit*)GetDlgItem(IDC_SHARED);
m_pStatic->GetLine(0,*MySharedData,80);
3.3銆佺敤浜庝紶杈撳彧璇繪暟鎹殑WM_COPYDATA
浼犺緭鍙鏁版嵁鍙互浣跨敤Win32涓殑WM_COPYDATA娑堟伅銆傝娑堟伅鐨勪富瑕佺洰鐨勬槸鍏佽鍦ㄨ繘紼嬮棿
浼犻掑彧璇繪暟鎹俉indows95鍦ㄩ氳繃WM_COPYDATA娑堟伅浼犻掓湡闂達紝涓嶆彁渚涚戶鎵垮悓姝ユ柟寮忋係D
K鏂囨。鎺ㄨ崘鐢ㄦ埛浣跨敤SendMessage鍑芥暟錛屾帴鍙楁柟鍦ㄦ暟鎹嫹璐濆畬鎴愬墠涓嶈繑鍥烇紝榪欐牱鍙戦佹柟灝?br>涓嶅彲鑳藉垹闄ゅ拰淇敼鏁版嵁錛?br>SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
鍏朵腑wParam璁劇疆涓哄寘鍚暟鎹殑紿楀彛鐨勫彞鏌勩俵Param鎸囧悜涓涓狢OPYDATASTRUCT鐨勭粨鏋勶細
typedef struct tagCOPYDATASTRUCT{
    DWORD dwData;//鐢ㄦ埛瀹氫箟鏁版嵁
    DWORD cbData;//鏁版嵁澶у皬
    PVOID lpData;//鎸囧悜鏁版嵁鐨勬寚閽?br>}COPYDATASTRUCT;
璇ョ粨鏋勭敤鏉ュ畾涔夌敤鎴鋒暟鎹?br>3.4銆佺洿鎺ヨ皟鐢≧eadProcessMemory鍜學riteProcessMemory鍑芥暟瀹炵幇榪涚▼闂撮氳
閫氳繃璋冪敤ReadProcessMemory浠ュ強WriteProcessMemory鍑芥暟鐢ㄦ埛鍙互鎸夌被浼間笌Windows3.
1鐨勬柟娉曞疄鐜拌繘紼嬮棿閫氳錛屽湪鍙戦佽繘紼嬩腑鍒嗛厤涓鍧楀唴瀛樺瓨鏀炬暟鎹紝鍙互璋冪敤GlobalAlloc
鎴栬匳irtualAlloc鍑芥暟瀹炵幇錛?br>pApp->m_hGlobalHandle=GlobalAlloc(GMEM_SHARE,1024);
鍙互寰楀埌鎸囬拡鍦板潃錛?br>pApp->mpszGlobalHandlePtr=(LPSTR)GlobalLock
(pApp->m_hGlobalHandle);
鍦ㄦ帴鏀惰繘紼嬩腑瑕佺敤鍒扮敤鎴峰笇鏈涘獎鍝嶇殑榪涚▼鐨勬墦寮鍙ユ焺銆備負浜嗚鍐欏彟涓榪涚▼錛屽簲鎸夊涓嬫柟
寮忚皟鐢∣penProcess鍑芥暟錛?br>HANDLE hTargetProcess=OpenProcess(
STANDARD_RIGHTS_REQUIRED|
PROCESS_VM_REDA|
PROCESS_VM_WRITE|
PROCESS_VM_OPERATION,//璁塊棶鏉冮檺
FALSE,//緇ф壙鍏崇郴
dwProcessID);//榪涚▼ID
涓轟繚璇丱penProcess鍑芥暟璋冪敤鎴愬姛錛岀敤鎴鋒墍褰卞搷鐨勮繘紼嬪繀欏葷敱涓婅堪鏍囧織鍒涘緩銆?br>涓鏃︾敤鎴瘋幏寰椾竴涓繘紼嬬殑鏈夋晥鍙ユ焺錛屽氨鍙互璋冪敤ReadProcessMemory鍑芥暟璇誨彇璇ヨ繘紼嬬殑鍐?br>瀛橈細
BOOL ReadProcessMemory(
HANDLE hProcess,    // 榪涚▼鎸囬拡
LPCVOID lpBaseAddress,    // 鏁版嵁鍧楃殑棣栧湴鍧
LPVOID lpBuffer,    // 璇誨彇鏁版嵁鎵闇緙撳啿鍖?br>DWORD cbRead,    // 瑕佽鍙栫殑瀛楄妭鏁?br>LPDWORD lpNumberOfBytesRead
);
浣跨敤鍚屾牱鐨勫彞鏌勪篃鍙互鍐欏叆璇ヨ繘紼嬬殑鍐呭瓨錛?br>BOOL WriteProcessMemory(
HANDLE hProcess,    // 榪涚▼鎸囬拡
LPVOID lpBaseAddress,    // 瑕佸啓鍏ョ殑棣栧湴鍧
LPVOID lpBuffer,    // 緙撳啿鍖哄湴鍧
DWORD cbWrite,    // 瑕佸啓鐨勫瓧鑺傛暟
LPDWORD lpNumberOfBytesWritten
);
濡備笅鎵紺烘槸璇誨啓鍙︿竴榪涚▼鐨勫叡浜唴瀛樹腑鐨勬暟鎹細
ReadProcessMemory((HANDLE)hTargetProcess,
(LPSTR)lpsz,m_strGlobal.GetBuffer(_MAX_FIELD),
_MAX_FIELD,&cb);
WriteProcessMemory((HANDLE)hTargetProcess,
(LPSTR)lpsz,(LPSTR)STARS,
m_strGlobal.GetLength(),&cb);
4銆佽繘紼嬩箣闂寸殑娑堟伅鍙戦佷笌鎺ユ敹
鍦ㄥ疄闄呭簲鐢ㄤ腑榪涚▼涔嬮棿闇瑕佸彂閫佸拰鎺ユ敹Windows娑堟伅鏉ラ氱煡榪涚▼闂寸浉浜掗氳錛屽彂閫佹柟鍙戦?br>閫氳鐨勬秷鎭互閫氱煡鎺ユ敹鏂癸紝鎺ユ敹鏂瑰湪鏀跺埌鍙戦佹柟鐨勬秷鎭悗灝卞彲浠ュ鍐呭瓨榪涜璇誨啓鎿嶄綔銆?br>
鎴戜滑鍦ㄧ▼搴忚璁′腑閲囩敤Windows娉ㄥ唽娑堟伅榪涜娑堟伅浼犻掞紝棣栧厛鍦ㄥ彂閫佽繘紼嬪垵濮嬪寲榪囩▼涓繘
琛屾秷鎭敞鍐岋細
m_nMsgMapped=::RegisterWindowsMessage("Mapped");
m_nMsgHandle=::RegisterWindowsMessage("Handle");
m_nMsgShared=::RegisterWindowsMessage("Shared");
鍦ㄧ▼搴忚繍琛屼腑鍚戞帴鏀惰繘紼嬪彂閫佹秷鎭細
CWnd* pWndRecv=FindWindow(lpClassName,"Receive");
pWndRecv->SendMessage(m_MsgMapped,0,0);
pWndRecv->SendMessage(m_nMsgHandle,
(UINT)GetCurrentProcessID(),(LONG)pApp->m_hGlobalHandle);
pWndRecv->SendMessage(m_nMsgShared,0,0);
鍙互鎸夊涓嬫柟寮忓彂閫乄M_COPYDATA娑堟伅錛?br>static COPYDATASTRUCT cds;//鐢ㄦ埛瀛樻斁鏁版嵁
pWnd->SendMessage(WM_COPYDATA,NULL,(LONG)&cds);
鎺ユ敹鏂硅繘紼嬪垵濮嬪寲涔熷繀欏昏繘琛屾秷鎭敞鍐岋細
UNIT CRecvApp:: m_nMsgMapped=::RegisterWindowsMessage("Mapped");
UNIT CRecvApp::m_nMsgHandle=::RegisterWindowsMessage("Handle");
UNIT CRecvApp::m_nMsgShared=::RegisterWindowsMessage("Shared");
鍚屾椂鏄犲皠娑堟伅鍑芥暟濡備笅錛?br>ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgMapped,OnRegMsgMapped)
ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgHandle,OnRegMsgHandle)
ON_REGISTERED_MASSAGE(CRecvApp::m_nMsgShared,OnRegMsgShared)
鍦ㄨ繖浜涙秷鎭嚱鏁版垜浠氨鍙互閲囩敤涓婅堪鎶鏈疄鐜版帴鏀惰繘紼嬩腑鏁版嵁鐨勮鍐欐搷浣滀簡銆?br>5銆佺粨鏉熻
浠庝互涓婂垎鏋愪腑鎴戜滑鍙互鐪嬪嚭Windows95鐨勫唴瀛樼鐞嗕笌Windows 3.x鐩告瘮鏈夊緢澶氱殑涓嶅悓錛屽
榪涚▼涔嬮棿鐨勯氳鏈夎緝涓轟弗鏍肩殑闄愬埗銆傝繖灝辯‘淇濅簡浠諱綍鏁呴殰紼嬪簭鏃犳硶鎰忓鍦板啓鍏ョ敤鎴風殑鍦?br>鍧絀洪棿錛岃岀敤鎴峰垯鍙牴鎹疄闄呮儏鍐電伒媧誨湴榪涜榪涚▼闂寸殑鏁版嵁閫氳錛屼粠榪欎竴鐐逛笂鏉ヨWind
ows95澧炲己搴旂敤紼嬪簭鐨勫己澹с?br>鍙傝冩枃鐚細
1銆?nbsp;David J.Kruglinski, Visual C++鎶鏈唴騫? 鍖椾含錛氭竻鍗庡ぇ瀛﹀嚭鐗堢ぞ錛?995.
2銆?nbsp;Microsoft Co. Visual C++ 5.0 On Line Help.


浜曟硥 2007-12-13 15:50 鍙戣〃璇勮
]]>
windows mobile 鍏抽棴gprs榪炴帴http://m.shnenglu.com/zjj2816/archive/2007/11/22/37127.html浜曟硥浜曟硥Thu, 22 Nov 2007 04:59:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/22/37127.htmlhttp://m.shnenglu.com/zjj2816/comments/37127.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/22/37127.html#Feedback1http://m.shnenglu.com/zjj2816/comments/commentRss/37127.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/37127.html{
     int index; // An integer index
     DWORD dwError, dwRasConnSize, dwNumConnections; // Number of connections found
     RASCONN RasConn[20]; // Buffer for connection state data,Assume the maximum number of entries is 20.
    BOOL RETURN_VALUE=0;
    WCHAR *MySelectNetName;

     // Assume no more than 20 connections.
     RasConn[0].dwSize = sizeof (RASCONN);
     dwRasConnSize = 20 * sizeof (RASCONN);

     // Find all connections.
     if (dwError = RasEnumConnections (RasConn, &dwRasConnSize,&dwNumConnections))
     {
          return -1;
     }

     // If there are no connections, return zero.
     if (!dwNumConnections)
     {
          return 0;
     }

     // Terminate all of the remote access connections.
     GetConnectionStatus();
    //here add to get selected network
    MySelectNetName=GetMMSSelectNet();
   
    GPRSServerName* P_CMWAPtemp=pCMWAP_backup;
     for (index = 0; index < (int)dwNumConnections; ++index)
     {
         while( P_CMWAPtemp )
         {
              if(!wcscmp(RasConn[index].szEntryName,P_CMWAPtemp->ServerName)||
                !wcscmp(RasConn[index].szEntryName, MySelectNetName))
              {
                   if (dwError = RasHangUp (RasConn[index].hrasconn))
                       
                        RETURN_VALUE=-1;
                   else
                           //successfully disconnect cmwap;
                        RETURN_VALUE=0;
              }
            P_CMWAPtemp = P_CMWAPtemp->pnext ;
          }
     }
    //free mem
     freelink(pCMWAP_backup);
     return RETURN_VALUE;
}




浜曟硥 2007-11-22 12:59 鍙戣〃璇勮
]]>
c++ 鍜?jscripthttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36988.html浜曟硥浜曟硥Tue, 20 Nov 2007 01:19:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36988.htmlhttp://m.shnenglu.com/zjj2816/comments/36988.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36988.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/36988.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/36988.html
#include <afxdisp.h>
#include <activscp.h>

class CCodeObject;
class CScriptSite;

class CScriptingSupportHelper
{
public:
    CScriptingSupportHelper();
    ~CScriptingSupportHelper();

    BOOL Create(CWnd* pWnd);
    BOOL RunScript(CString str);

    CCodeObject* GetCodeObject() const { return m_pCodeObject; }
    CScriptSite* GetScriptSite() const { return m_pScriptSite; }
    IActiveScript* GetActiveScript() const { return m_pActiveScript; }

private:
    CCodeObject* m_pCodeObject;
    CScriptSite* m_pScriptSite;

    IActiveScript* m_pActiveScript;  
    IActiveScriptParse* m_pActiveScriptParse;
};

class CCodeObject : public CCmdTarget
{
public:
    CCodeObject(CScriptingSupportHelper* pScripting, CWnd* pWnd);
    virtual ~CCodeObject();

    void Line(long, long, long, long);
    void Ellipse(long, long, long, long);
    void DrawText(LPCTSTR msg, long x, long y, long w, long h);

    void OnPaint();
    void OnMouseClick(long x, long y);

private:
    CWnd* m_pWnd;
    CScriptingSupportHelper* m_pScripting;
    BOOL GetDispatch(OLECHAR* name, COleDispatchDriver& disp, DISPID& dispid);

    enum
    {
        idLine = 1,
        idEllipse,
        idDrawText,
    };

    DECLARE_DISPATCH_MAP()
};

class CScriptSite : public IActiveScriptSite
{
public:
    CScriptSite(CScriptingSupportHelper* pScripting)  
    {
        m_pScripting = pScripting;
    };
   
    ~CScriptSite() 
    {
    };

    virtual ULONG STDMETHODCALLTYPE AddRef()
    {   
        return InterlockedIncrement(&m_nRefCount);
    }
   
    virtual ULONG STDMETHODCALLTYPE Release()
    {    
        return InterlockedDecrement(&m_nRefCount);
    };
   
    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppObj)
    {
        *ppObj = NULL;

        if ((iid == IID_IUnknown) || (iid == IID_IActiveScriptSite))
        {
            *ppObj= (IActiveScriptSite*)this;
            AddRef();
            return S_OK;
        }

        return E_NOINTERFACE;
    }

    virtual HRESULT STDMETHODCALLTYPE GetLCID(LCID __RPC_FAR *)
    {
        return E_NOTIMPL;
    }
   
    virtual HRESULT STDMETHODCALLTYPE GetItemInfo(LPCOLESTR, DWORD, IUnknown __RPC_FAR *__RPC_FAR * pObj, ITypeInfo __RPC_FAR *__RPC_FAR *)
    {
        ASSERT(m_pScripting);
        ASSERT(m_pScripting->GetCodeObject());

        *pObj = m_pScripting->GetCodeObject()->GetIDispatch(TRUE);
        return S_OK;
    }
       
    virtual HRESULT STDMETHODCALLTYPE GetDocVersionString(BSTR __RPC_FAR *)
    {
        return E_NOTIMPL;
    }
       
    virtual HRESULT STDMETHODCALLTYPE OnScriptTerminate(const VARIANT __RPC_FAR * ,const EXCEPINFO __RPC_FAR *)
    {
        return E_NOTIMPL;
    }

       
    virtual HRESULT STDMETHODCALLTYPE OnStateChange(SCRIPTSTATE)
    {
        return E_NOTIMPL;
    }
       
    virtual HRESULT STDMETHODCALLTYPE OnScriptError(IActiveScriptError __RPC_FAR * pScriptError)
    {
        return E_NOTIMPL;
    }
       
    virtual HRESULT STDMETHODCALLTYPE OnEnterScript()
    {
        return E_NOTIMPL;
    }
       
    virtual HRESULT STDMETHODCALLTYPE OnLeaveScript()
    {
        return E_NOTIMPL;
    }

private:
    long m_nRefCount;
    CScriptingSupportHelper* m_pScripting;
};

#include "StdAfx.h"
#include "ScriptingSupport.h"

CCodeObject::CCodeObject(CScriptingSupportHelper* pScripting, CWnd* pWnd)
    : m_pWnd(pWnd),
      m_pScripting(pScripting)

{
    EnableAutomation();
}

CCodeObject::~CCodeObject()
{
}

BEGIN_DISPATCH_MAP(CCodeObject, CCmdTarget)
DISP_FUNCTION_ID(CCodeObject, "Line", idLine, Line, VT_EMPTY, VTS_I4 VTS_I4 VTS_I4 VTS_I4)
DISP_FUNCTION_ID(CCodeObject, "Ellipse", idEllipse, Ellipse, VT_EMPTY, VTS_I4 VTS_I4 VTS_I4 VTS_I4)
DISP_FUNCTION_ID(CCodeObject, "DrawText", idDrawText, DrawText, VT_EMPTY, VTS_BSTR VTS_I4 VTS_I4 VTS_I4 VTS_I4)
END_DISPATCH_MAP()

void CCodeObject::Line(long x1, long y1, long x2, long y2)
{
    CWindowDC dc(m_pWnd);

    dc.MoveTo(x1, y1);
    dc.LineTo(x2, y2);
}

void CCodeObject::Ellipse(long x1, long y1, long x2, long y2)
{
    CWindowDC dc(m_pWnd);
    dc.Ellipse(x1, y1, x2, y2);
}

void CCodeObject::DrawText(LPCTSTR msg, long x, long y, long w, long h)
{
    CWindowDC dc(m_pWnd);
    CRect rect(x, y, x+w, y+h);

    dc.DrawText(msg, rect, 0);
}

void CCodeObject::OnPaint()
{
    COleDispatchDriver disp;
    DISPID dispid;
    if (GetDispatch(L"OnPaint", disp, dispid)) {
        disp.InvokeHelper(dispid, DISPATCH_METHOD, VT_EMPTY, 0, 0);
    }
}

BOOL CCodeObject::GetDispatch(OLECHAR* name, COleDispatchDriver& disp, DISPID& dispid)
{
    IDispatch* pScriptDispatch = 0;
    m_pScripting->GetActiveScript()->GetScriptDispatch(0, &pScriptDispatch);
    disp.AttachDispatch(pScriptDispatch);
    HRESULT hr = pScriptDispatch->GetIDsOfNames(IID_NULL, &name, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
    return SUCCEEDED(hr);
}

void CCodeObject::OnMouseClick(long x, long y)
{
    COleDispatchDriver disp;
    DISPID dispid;
    if (GetDispatch(L"OnMouseClick", disp, dispid)) {
        disp.InvokeHelper(dispid, DISPATCH_METHOD, VT_EMPTY, 0, (const BYTE*)(VTS_I4 VTS_I4), x, y);
    }
}

CScriptingSupportHelper::CScriptingSupportHelper()
    : m_pCodeObject(0),
      m_pScriptSite(0),
      m_pActiveScript(0),
      m_pActiveScriptParse(0)
{
}

CScriptingSupportHelper::~CScriptingSupportHelper()
{
    if (m_pActiveScript)
    {
        m_pActiveScript->Close();
        m_pActiveScriptParse->Release();
        m_pActiveScript->Release();
    }

    delete m_pCodeObject; m_pCodeObject=0;
    delete m_pScriptSite; m_pScriptSite=0;
}

BOOL CScriptingSupportHelper::RunScript(CString strText)
{
    EXCEPINFO ei = {0};
    BSTR bstrText = strText.AllocSysString();
    m_pActiveScriptParse->ParseScriptText(bstrText, NULL, NULL, NULL, 0, 0, 0, NULL, &ei);
    SysFreeString(bstrText);

    m_pActiveScript->SetScriptState(SCRIPTSTATE_CONNECTED);

    return TRUE;
}

BOOL CScriptingSupportHelper::Create(CWnd* pWnd)
{
    m_pCodeObject = new CCodeObject(this, pWnd);
    m_pScriptSite = new CScriptSite(this);

    CLSID clsidJScript;
    CLSIDFromProgID(L"JScript", &clsidJScript);
    CoCreateInstance(clsidJScript, NULL, CLSCTX_INPROC_SERVER, IID_IActiveScript, (void **)&m_pActiveScript);
    m_pActiveScript->QueryInterface(IID_IActiveScriptParse, (void**)&m_pActiveScriptParse);
    m_pActiveScript->SetScriptSite(m_pScriptSite);
    m_pActiveScript->AddNamedItem(L"Code", SCRIPTITEM_ISVISIBLE | SCRIPTITEM_ISSOURCE | SCRIPTITEM_GLOBALMEMBERS);
    m_pActiveScriptParse->InitNew();


    return TRUE;
}






浜曟硥 2007-11-20 09:19 鍙戣〃璇勮
]]>
(msdn)Using MFC to Automate SAPI (SAPI 5.3)http://msdn2.microsoft.com/en-us/library/ms717069.aspxhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36985.html浜曟硥浜曟硥Tue, 20 Nov 2007 01:06:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36985.htmlhttp://m.shnenglu.com/zjj2816/comments/36985.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36985.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/36985.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/36985.htmlMicrosoft Speech API 5.3   鐢╫leview 鍙互浜х敓 idl 鏂囦歡 鍐嶇敤 midl宸ュ叿 鍙互浜х敓 tlb,h,c 瀛樻牴鏂囦歡 絳?

Using MFC to Automate SAPI

Introduction

The Microsoft Foundation Classes (MFC) provides an easy and convenient way to automate calls to SAPI using its Class Wizard to generate wrappers for the SAPI layer from the SAPI Type Library.

In order to accomplish this, perform the following steps:

  1. Create a new MFCAppWizard(exe) project in Visual C++.
  2. Based on the type of application you are creating, follow the wizard prompts. In Step 3 of the wizard prompts, (or Step 2 if you are creating a Dialog Based application) make sure that the Automation check box is selected under the heading, What other support would you like to include?

Once the new project is ready, access Class Wizard.

  1. Click the Automation tab, and then click Add Class and select From a type library in the drop-down list.
  2. Browse for the sapi.dll file and open it.
  3. Select the classes you would like Class Wizard to generate a wrapper for. The resulting default header and implementation files are sapi.h and sapi.cpp respectively. The rest of this document assumes that you have chosen to use these default file names. Click OK.
  4. You should now be back in the Class Wizard window. Click OK.
After you are done with the above steps, Visual C++ will automatically add the Class Wizard generated files sapi.cpp and sapi.h to your project.

Upon viewing the sapi.h file, you should notice that it is nothing more than an automation wrapper that has been generated for all the classes you selected. Notice that all the classes inherit from COleDispatchDriver, hence the dispatch interface needs to be set up. This only requires a few lines of simple code, after which the wrapper class can be used just like any other C++ class.

Example

This example assumes that you chose to generate a wrapper for the ISpeechVoice class from among any other classes you may have selected. Using the project created above, include the sapi.h file within a source file in the project that will make automation calls to SAPI using the wrapper. In that source file, type the following code.

CLSID CLSID_SpVoice;    // class ID for the SAPI SpVoice object
LPDISPATCH pDisp; // dispatch interface for the class
ISpeechVoice voice; // use the MFC Class Wizard generated wrapper

CLSIDFromProgID(L"SAPI.SpVoice", &CLSID;_SpVoice);
voice.CreateDispatch(CLSID_SpVoice);
pDisp = voice.m_lpDispatch;

HRESULT hr = pDisp->QueryInterface(CLSID_SpVoice, (void**)&voice;.m_lpDispatch);

if (hr == S_OK) {
pDisp->Release();
}
else {
voice.AttachDispatch(pDisp, TRUE);
}

voice.Speak("hello world", 1); // asynchronous call to Speak method of ISpeechVoice interface

If you have been following the steps outlined above properly, you should hear your computer say "hello world!" That's all there is to using MFC to make automation calls to SAPI. Currently however, not all the wrapper classes generated by MFC's Class Wizard work properly. For instance, the ISpeechLexicon interface does not work. The work around for this is to implement your own automation wrapper classes using C++. The steps to do that are beyond the scope of this document. Of course, you can always use the COM interfaces in C++ and Automation in Visual Basic to ensure that every interface in SAPI works easily and flawlessly.



浜曟硥 2007-11-20 09:06 鍙戣〃璇勮
]]>
瀹㈡埛绔皟鐢╟omhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36983.html浜曟硥浜曟硥Tue, 20 Nov 2007 00:49:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36983.htmlhttp://m.shnenglu.com/zjj2816/comments/36983.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36983.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/36983.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/36983.html{
    ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
    //    {2D8EBDEE-437C-47c9-ABCC-F169E5E781D0}speeddial
    //    {85140985-7A18-4009-B5FB-43268FD154F8}ISpRecognizerLite
     
        CLSID CLSID_SpVoice;
        ::CLSIDFromProgID(L"SpeedDial", &CLSID_SpVoice);
        LPCLASSFACTORY pClsF;
        LPUNKNOWN punk;                   ::CoGetClassObject(CLSID_SpVoice,CLSCTX_INPROC_SERVER,NULL,IID_IClassFactory,(void**)&pClsF);
        pClsF->CreateInstance(NULL,IID_IUnknown,(void**)&punk);
    punk->QueryInterface(IID_ISpRecognizerLite,(void**)&闈炴娊璞$被);
    ::CoUninitialize();
}


浜曟硥 2007-11-20 08:49 鍙戣〃璇勮
]]>
(杞?鎵嬪伐娉ㄥ唽comhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36982.html浜曟硥浜曟硥Tue, 20 Nov 2007 00:48:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36982.htmlhttp://m.shnenglu.com/zjj2816/comments/36982.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36982.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/36982.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/36982.html{
    //for registration
    HMODULE hLib = ::LoadLibrary(strLib);
    if(hLib == 0) {
        return FALSE;
    }
    HRESULT (STDAPICALLTYPE *pDllRegisterServer)();
    (FARPROC&)pDllRegisterServer = ::GetProcAddress(hLib, _T("DllRegisterServer"));
    if(pDllRegisterServer == NULL) {  
        ::FreeLibrary(hLib);
        return FALSE;
    }
    if(FAILED(pDllRegisterServer ())) {
        ::FreeLibrary(hLib);
        return FALSE;
    } else {
        ::FreeLibrary(hLib);
        return TRUE;
    }
}

BOOL unregcom(LPCWSTR strLib)
{
    HMODULE hLib = ::LoadLibrary(strLib);
    if(hLib == 0) {
        return FALSE;
    }
    HRESULT (STDAPICALLTYPE *pDllUnregisterServer)();
    (FARPROC&)pDllUnregisterServer = ::GetProcAddress(hLib, _T("DllUnregisterServer"));
    if(pDllUnregisterServer == NULL) {
        ::FreeLibrary(hLib);
        return FALSE;
    }
    if(FAILED(pDllUnregisterServer())) {
        ::FreeLibrary(hLib);
        return FALSE;
    } else {
        ::FreeLibrary(hLib);
        return TRUE;
    }
}




浜曟硥 2007-11-20 08:48 鍙戣〃璇勮
]]>
(杞?Rapi 浣跨敤http://m.shnenglu.com/zjj2816/archive/2007/11/20/36981.html浜曟硥浜曟硥Tue, 20 Nov 2007 00:46:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36981.htmlhttp://m.shnenglu.com/zjj2816/comments/36981.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/20/36981.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/36981.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/36981.html{
    CFile oldFile;
    oldFile.Open(strFileNamePC, CFile::modeRead |CFile::typeBinary);
    int iLen = oldFile.GetLength();
    iLen = iLen / BUFFER_SIZE;
    BSTR bstr = strFileNamePPC.AllocSysString();
    SysFreeString(bstr);
    CeRapiInit();
    HANDLE h = CeCreateFile(bstr, GENERIC_READ | GENERIC_WRITE, 0, NULL,
        OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    char cTemp[BUFFER_SIZE];
    DWORD nbytes;
    int iTotBytes = 0;
    int iReaded=0;
    while((iReaded=oldFile.Read(&cTemp, BUFFER_SIZE)) >= 1)
        CeWriteFile(h, &cTemp, (DWORD)iReaded, &nbytes, NULL);
    CeCloseHandle(h);
    oldFile.Close();
    CeRapiUninit();
}

void CopyFileWinCEtoPC(CString strFileNamePPC, CString strFileNamePC)
{
    BSTR bstr = strFileNamePPC.AllocSysString();
    SysFreeString(bstr);
    CeRapiInit();

    HANDLE h;
    h = CeCreateFile(bstr, GENERIC_READ, FILE_SHARE_READ, NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    CFile oldFile;
    oldFile.Open(strFileNamePC, CFile::modeCreate | CFile::modeWrite);

    char cTemp[BUFFER_SIZE];
    DWORD nbytes;
    CString s;

    while(CeReadFile(h, &cTemp, (DWORD)BUFFER_SIZE, &nbytes, NULL) == TRUE)
    {
        oldFile.Write(&cTemp, nbytes);
        if(nbytes < BUFFER_SIZE)
            break;
    }
    CeCloseHandle(h);
    oldFile.Close();
    CeRapiUninit(); 
}

BOOL DeleteFileFromCE(CString strFileNamePPC)
{
    BSTR bstr = strFileNamePPC.AllocSysString();
    SysFreeString(bstr);
    CeRapiInit();
    BOOL bRet = CeDeleteFile(bstr);
    CeRapiUninit();
    return bRet;
}




浜曟硥 2007-11-20 08:46 鍙戣〃璇勮
]]>
鍑芥暟瀵規瘮http://m.shnenglu.com/zjj2816/archive/2007/11/19/36923.html浜曟硥浜曟硥Mon, 19 Nov 2007 02:25:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/19/36923.htmlhttp://m.shnenglu.com/zjj2816/comments/36923.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/19/36923.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/36923.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/36923.html
鐢╛t鏇挎崲瀛楃'w',姣斿 wcsncpy  to _tcsncpy(鑷傚簲鍑芥暟).

_tcsncpy_l 鍚庣紑  _l 涓嶆帹鑽愪嬌鐢ㄧ殑鍑芥暟

_tcsncpy_s 鍚庣紑  _s Security Enhancements in the CRT

_tcsncpy_s_l 鍚庣紑  _s_l 鍚?_s

security enhancements


瀹藉瓧絎﹀鐞嗗嚱鏁板嚱鏁頒笌鏅氬嚱鏁板鐓ц〃 
  
 

瀛楃鍒嗙被錛?nbsp;    瀹藉瓧絎﹀嚱鏁版櫘閫欳鍑芥暟鎻忚堪 
iswalnum錛堬級     isalnum錛堬級 嫻嬭瘯瀛楃鏄惁涓烘暟瀛楁垨瀛楁瘝 
iswalpha錛堬級     isalpha錛堬級 嫻嬭瘯瀛楃鏄惁鏄瓧姣?nbsp;
iswcntrl錛堬級     iscntrl錛堬級 嫻嬭瘯瀛楃鏄惁鏄帶鍒剁 
iswdigit錛堬級     isdigit錛堬級 嫻嬭瘯瀛楃鏄惁涓烘暟瀛?nbsp;
iswgraph錛堬級     isgraph錛堬級 嫻嬭瘯瀛楃鏄惁鏄彲瑙佸瓧絎?nbsp;
iswlower錛堬級     islower錛堬級 嫻嬭瘯瀛楃鏄惁鏄皬鍐欏瓧絎?nbsp;
iswprint錛堬級     isprint錛堬級 嫻嬭瘯瀛楃鏄惁鏄彲鎵撳嵃瀛楃 
iswpunct錛堬級     ispunct錛堬級 嫻嬭瘯瀛楃鏄惁鏄爣鐐圭鍙?nbsp;
iswspace錛堬級     isspace錛堬級 嫻嬭瘯瀛楃鏄惁鏄┖鐧界鍙?nbsp;
iswupper錛堬級     isupper錛堬級 嫻嬭瘯瀛楃鏄惁鏄ぇ鍐欏瓧絎?nbsp;
iswxdigit錛堬級     isxdigit錛堬級嫻嬭瘯瀛楃鏄惁鏄崄鍏繘鍒剁殑鏁板瓧 


澶у皬鍐欒漿鎹細     
瀹藉瓧絎﹀嚱鏁?nbsp;   鏅欳鍑芥暟鎻忚堪 
towlower錛堬級     tolower錛堬級 鎶婂瓧絎﹁漿鎹負灝忓啓 
towupper錛堬級     toupper錛堬級 鎶婂瓧絎﹁漿鎹負澶у啓 


瀛楃姣旇緝錛?nbsp;    瀹藉瓧絎﹀嚱鏁版櫘閫欳鍑芥暟鎻忚堪 
wcscoll錛堬級     strcoll錛堬級 姣旇緝瀛楃涓?nbsp;


鏃ユ湡鍜屾椂闂磋漿鎹細 
瀹藉瓧絎﹀嚱鏁版弿榪?nbsp;
strftime錛堬級     鏍規嵁鎸囧畾鐨勫瓧絎︿覆鏍煎紡鍜宭ocale璁劇疆鏍煎紡鍖栨棩鏈熷拰鏃墮棿 
wcsftime錛堬級     鏍規嵁鎸囧畾鐨勫瓧絎︿覆鏍煎紡鍜宭ocale璁劇疆鏍煎紡鍖栨棩鏈熷拰鏃墮棿錛?nbsp;騫惰繑鍥炲瀛楃涓?nbsp;
strptime錛堬級     鏍規嵁鎸囧畾鏍煎紡鎶婂瓧絎︿覆杞崲涓烘椂闂村鹼紝 鏄痵trftime鐨勫弽榪囩▼ 


鎵撳嵃鍜屾壂鎻忓瓧絎︿覆錛?nbsp;
瀹藉瓧絎﹀嚱鏁版弿榪?nbsp;
fprintf錛堬級
/fwprintf錛堬級     浣跨敤vararg鍙傞噺鐨勬牸寮忓寲杈撳嚭 
fscanf錛堬級
/fwscanf錛堬級         鏍煎紡鍖栬鍏?nbsp;
printf錛堬級             浣跨敤vararg鍙傞噺鐨勬牸寮忓寲杈撳嚭鍒版爣鍑嗚緭鍑?nbsp;
scanf錛堬級             浠庢爣鍑嗚緭鍏ョ殑鏍煎紡鍖栬鍏?nbsp;
sprintf錛堬級
/swprintf錛堬級     鏍規嵁vararg鍙傞噺琛ㄦ牸寮忓寲鎴愬瓧絎︿覆 
sscanf錛堬級             浠ュ瓧絎︿覆浣滄牸寮忓寲璇誨叆 
vfprintf錛堬級
/vfwprintf錛堬級     浣跨敤stdarg鍙傞噺琛ㄦ牸寮忓寲杈撳嚭鍒版枃浠?nbsp;
vprintf錛堬級             浣跨敤stdarg鍙傞噺琛ㄦ牸寮忓寲杈撳嚭鍒版爣鍑嗚緭鍑?nbsp;
vsprintf錛堬級
/vswprintf錛堬級     鏍煎紡鍖杝tdarg鍙傞噺琛ㄥ茍鍐欏埌瀛楃涓?nbsp;


鏁板瓧杞崲錛?nbsp;
瀹藉瓧絎﹀嚱鏁?nbsp;   鏅欳鍑芥暟鎻忚堪 
wcstod錛堬級     strtod錛堬級  鎶婂瀛楃鐨勫垵濮嬮儴鍒嗚漿鎹負鍙岀簿搴︽誕鐐規暟 
wcstol錛堬級     strtol錛堬級  鎶婂瀛楃鐨勫垵濮嬮儴鍒嗚漿鎹負闀挎暣鏁?nbsp;
wcstoul錛堬級     strtoul錛堬級 鎶婂瀛楃鐨勫垵濮嬮儴鍒嗚漿鎹負鏃犵鍙烽暱鏁存暟 


澶氬瓧鑺傚瓧絎﹀拰瀹藉瓧絎﹁漿鎹㈠強鎿嶄綔錛?nbsp;
瀹藉瓧絎﹀嚱鏁版弿榪?nbsp;
mblen錛堬級         鏍規嵁locale鐨勮緗‘瀹氬瓧絎︾殑瀛楄妭鏁?nbsp;
mbstowcs錛堬級         鎶婂瀛楄妭瀛楃涓茶漿鎹負瀹藉瓧絎︿覆 
mbtowc錛堬級
/btowc錛堬級    鎶婂瀛楄妭瀛楃杞崲涓哄瀛楃 
wcstombs錛堬級         鎶婂瀛楃涓茶漿鎹負澶氬瓧鑺傚瓧絎︿覆 
wctomb錛堬級
/wctob錛堬級     鎶婂瀛楃杞崲涓哄瀛楄妭瀛楃 


杈撳叆鍜岃緭鍑猴細 
瀹藉瓧絎﹀嚱鏁?nbsp;   鏅欳鍑芥暟鎻忚堪 
fgetwc錛堬級     fgetc錛堬級     浠庢祦涓鍏ヤ竴涓瓧絎﹀茍杞崲涓哄瀛楃 
fgetws錛堬級     fgets錛堬級     浠庢祦涓鍏ヤ竴涓瓧絎︿覆騫惰漿鎹負瀹藉瓧絎︿覆 
fputwc錛堬級     fputc錛堬級     鎶婂瀛楃杞崲涓哄瀛楄妭瀛楃騫朵笖杈撳嚭鍒版爣鍑嗚緭鍑?nbsp;
fputws錛堬級     fputs錛堬級     鎶婂瀛楃涓茶漿鎹負澶氬瓧鑺傚瓧絎﹀茍涓旇緭鍑哄埌鏍囧噯杈撳嚭涓?nbsp;
getwc錛堬級     getc錛堬級     浠庢爣鍑嗚緭鍏ヤ腑璇誨彇瀛楃錛?nbsp;騫朵笖杞崲涓哄瀛楃 
getwchar錛堬級     getchar錛堬級     浠庢爣鍑嗚緭鍏ヤ腑璇誨彇瀛楃錛?nbsp;騫朵笖杞崲涓哄瀛楃 
None         gets錛堬級     浣跨敤fgetws錛堬級 
putwc錛堬級     putc錛堬級     鎶婂瀛楃杞崲鎴愬瀛楄妭瀛楃騫朵笖鍐欏埌鏍囧噯杈撳嚭 
putwchar錛堬級     putchar錛堬級     鎶婂瀛楃杞崲鎴愬瀛楄妭瀛楃騫朵笖鍐欏埌鏍囧噯杈撳嚭 
None         puts錛堬級     浣跨敤fputws錛堬級 
ungetwc錛堬級     ungetc錛堬級     鎶婁竴涓瀛楃鏀懼洖鍒拌緭鍏ユ祦涓?nbsp;


瀛楃涓叉搷浣滐細 
瀹藉瓧絎﹀嚱鏁?nbsp;       鏅欳鍑芥暟鎻忚堪 
wcscat錛堬級         strcat錛堬級     鎶婁竴涓瓧絎︿覆鎺ュ埌鍙︿竴涓瓧絎︿覆鐨勫熬閮?nbsp;
wcsncat錛堬級         strncat錛堬級     綾諱技浜巜cscat錛堬級錛?nbsp;鑰屼笖鎸囧畾綺樻帴瀛楃涓茬殑綺樻帴闀垮害. 
wcschr錛堬級         strchr錛堬級     鏌ユ壘瀛愬瓧絎︿覆鐨勭涓涓綅緗?nbsp;
wcsrchr錛堬級         strrchr錛堬級     浠庡熬閮ㄥ紑濮嬫煡鎵懼瓙瀛楃涓插嚭鐜扮殑絎竴涓綅緗?nbsp;
wcspbrk錛堬級         strpbrk錛堬級     浠庝竴瀛楃瀛楃涓蹭腑鏌ユ壘鍙︿竴瀛楃涓蹭腑浠諱綍涓涓瓧絎︾涓嬈″嚭鐜扮殑浣嶇疆 
wcswcs錛堬級
/wcsstr錛堬級     strchr錛堬級     鍦ㄤ竴瀛楃涓蹭腑鏌ユ壘鍙︿竴瀛楃涓茬涓嬈″嚭鐜扮殑浣嶇疆 
wcscspn錛堬級         strcspn錛堬級     榪斿洖涓嶅寘鍚浜屼釜瀛楃涓茬殑鐨勫垵濮嬫暟鐩?nbsp;
wcsspn錛堬級         strspn錛堬級     榪斿洖鍖呭惈絎簩涓瓧絎︿覆鐨勫垵濮嬫暟鐩?nbsp;
wcscpy錛堬級         strcpy錛堬級     鎷瘋礉瀛楃涓?nbsp;
wcsncpy錛堬級         strncpy錛堬級     綾諱技浜巜cscpy錛堬級錛?nbsp;鍚屾椂鎸囧畾鎷瘋礉鐨勬暟鐩?nbsp;
wcscmp錛堬級         strcmp錛堬級     姣旇緝涓や釜瀹藉瓧絎︿覆 
wcsncmp錛堬級         strncmp錛堬級     綾諱技浜巜cscmp錛堬級錛?nbsp;榪樿鎸囧畾姣旇緝瀛楃瀛楃涓茬殑鏁扮洰 
wcslen錛堬級         strlen錛堬級     鑾峰緱瀹藉瓧絎︿覆鐨勬暟鐩?nbsp;
wcstok錛堬級         strtok錛堬級     鏍規嵁鏍囩ず絎︽妸瀹藉瓧絎︿覆鍒嗚В鎴愪竴緋誨垪瀛楃涓?nbsp;
wcswidth錛堬級         None         鑾峰緱瀹藉瓧絎︿覆鐨勫搴?nbsp;
wcwidth錛堬級         None         鑾峰緱瀹藉瓧絎︾殑瀹藉害 


鍙﹀榪樻湁瀵瑰簲浜巑emory鎿嶄綔鐨?nbsp;wmemcpy錛堬級錛?nbsp;wmemchr錛堬級錛?nbsp;wmemcmp錛堬級錛?nbsp;wmemmove錛堬級錛?nbsp;wmemset錛堬級錛?/span>

浜曟硥 2007-11-19 10:25 鍙戣〃璇勮
]]>
IBasicVideo::GetCurrentImage 鎶撳浘http://m.shnenglu.com/zjj2816/archive/2007/11/19/36918.html浜曟硥浜曟硥Mon, 19 Nov 2007 00:40:00 GMThttp://m.shnenglu.com/zjj2816/archive/2007/11/19/36918.htmlhttp://m.shnenglu.com/zjj2816/comments/36918.htmlhttp://m.shnenglu.com/zjj2816/archive/2007/11/19/36918.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/36918.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/36918.htmlhttp://www.geekpage.jp/en/programming/directshow/getcurrentimage.php

#include <stdio.h>
#include <dshow.h>
// change here
#define	FILENAME L"C:\\DXSDK\\Samples\\Media\\butterfly.mpg"
// note that this sample fails on some environment
int
main()
{
IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
IBasicVideo *pBasicVideo;
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder,
(LPVOID *)&pGraphBuilder);
pGraphBuilder->QueryInterface(IID_IMediaControl,
(LPVOID *)&pMediaControl);
pMediaControl->RenderFile(FILENAME);

pGraphBuilder->QueryInterface(IID_IBasicVideo,
(LPVOID *)&pBasicVideo);

pMediaControl->Run();
// The image will be saved when OK is clicked
MessageBox(NULL,
"Grab Image",
"Grab",
MB_OK);

// Must Pause before using GetCurrentImage
pMediaControl->Pause();
// get width and height
long height, width;
pBasicVideo->get_VideoHeight(&height);
pBasicVideo->get_VideoWidth(&width);
long bufSize;
long *imgData;
HRESULT hr;
/*
The second value is NULL to resolve required buffer size.
The required buffer size will be returned in variable "bufSize".
*/
hr = pBasicVideo->GetCurrentImage(&bufSize, NULL);
if (FAILED(hr)) {
printf("GetCurrentImage failed\n");
return 1;
}
if (bufSize < 1) {
printf("failed to get data size\n");
return 1;
}
imgData = (long *)malloc(bufSize);
// The data will be in DIB format
pBasicVideo->GetCurrentImage(&bufSize, imgData);

// save DIB file as Bitmap.
// This sample saves image as bitmap to help
// understanding the sample.
HANDLE fh;
BITMAPFILEHEADER bmphdr;
BITMAPINFOHEADER bmpinfo;
DWORD nWritten;
memset(&bmphdr, 0, sizeof(bmphdr));
memset(&bmpinfo, 0, sizeof(bmpinfo));
bmphdr.bfType = ('M' << 8) | 'B';
bmphdr.bfSize = sizeof(bmphdr) + sizeof(bmpinfo) + bufSize;
bmphdr.bfOffBits = sizeof(bmphdr) + sizeof(bmpinfo);
bmpinfo.biSize = sizeof(bmpinfo);
bmpinfo.biWidth = width;
bmpinfo.biHeight = height;
bmpinfo.biPlanes = 1;
bmpinfo.biBitCount = 32;
fh = CreateFile("result.bmp",
GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(fh, &bmphdr, sizeof(bmphdr), &nWritten, NULL);
WriteFile(fh, &bmpinfo, sizeof(bmpinfo), &nWritten, NULL);
WriteFile(fh, imgData, bufSize, &nWritten, NULL);
CloseHandle(fh);

free(imgData);
// Release resource
pBasicVideo->Release();

pMediaControl->Release();
pGraphBuilder->Release();
CoUninitialize();
return 0;
}


浜曟硥 2007-11-19 08:40 鍙戣〃璇勮
]]>
C++綾誨璞$殑鎷瘋礉鏋勯犲嚱鏁板垎鏋?/title><link>http://m.shnenglu.com/zjj2816/archive/2006/12/01/15831.html</link><dc:creator>浜曟硥</dc:creator><author>浜曟硥</author><pubDate>Fri, 01 Dec 2006 00:52:00 GMT</pubDate><guid>http://m.shnenglu.com/zjj2816/archive/2006/12/01/15831.html</guid><wfw:comment>http://m.shnenglu.com/zjj2816/comments/15831.html</wfw:comment><comments>http://m.shnenglu.com/zjj2816/archive/2006/12/01/15831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zjj2816/comments/commentRss/15831.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/zjj2816/services/trackbacks/15831.html</trackback:ping><description><![CDATA[瀵逛簬鏅氱被鍨嬬殑瀵硅薄鏉ヨ錛屽畠浠箣闂寸殑澶嶅埗鏄緢綆鍗曠殑錛屼緥濡傦細 <br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>int a=100;<br />int b=a;</td></tr></tbody></table><br />銆銆鑰岀被瀵硅薄涓庢櫘閫氬璞′笉鍚岋紝綾誨璞″唴閮ㄧ粨鏋勪竴鑸緝涓哄鏉傦紝瀛樺湪鍚勭鎴愬憳鍙橀噺銆備笅闈㈢湅涓涓被瀵硅薄鎷瘋礉鐨勭畝鍗曚緥瀛愩?<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>#include <iostream><br />using namespace std;<br />class CA<br />{<br />銆public:<br />銆銆CA(int b)<br />銆銆{<br />銆銆銆a=b;<br />銆銆}<br />銆銆void Show ()<br />銆銆{<br />銆銆銆cout<<a<<endl;<br />銆銆}<br />銆private:<br />銆銆int a;<br />};<br /><br />int main()<br />{<br />銆CA A(100);<br />銆CA B=A;<br />銆B.Show ();<br />銆return 0;<br />}</td></tr></tbody></table><br />銆銆榪愯<a class="bluekey" target="_blank">紼嬪簭</a>錛屽睆騫曡緭鍑?00銆備粠浠ヤ笂浠g爜鐨勮繍琛岀粨鏋滃彲浠ョ湅鍑猴紝緋葷粺涓哄璞鍒嗛厤浜嗗唴瀛樺茍瀹屾垚浜嗕笌瀵硅薄A鐨勫鍒惰繃紼嬨傚氨綾誨璞¤岃█錛岀浉鍚岀被鍨嬬殑綾誨璞℃槸閫氳繃鎷瘋礉鏋勯犲嚱鏁版潵瀹屾垚鏁翠釜澶嶅埗榪囩▼鐨勩備笅闈㈡垜浠婦渚嬭鏄庢嫹璐濇瀯閫犲嚱鏁扮殑宸ヤ綔榪囩▼銆?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>#include <iostream><br />using namespace std;<br />class CA<br />{<br />銆public:<br />銆銆CA(int b)<br />銆銆{<br />銆銆銆a=b;<br />銆銆}<br />銆銆CA(const CA& C)<br />銆銆{<br />銆銆銆a=C.a;<br />銆銆}<br />銆銆void Show()<br />銆銆{<br />銆銆銆cout<<a<<endl;<br />銆銆}<br />銆private:<br />銆銆int a;<br />};<br /><br />int main()<br />{<br />銆CA A(100);<br />銆CA B=A;<br />銆B.Show ();<br />銆return 0;<br />}</td></tr></tbody></table><br />銆銆CA(const CA& C)灝辨槸鎴戜滑鑷畾涔夌殑鎷瘋礉鏋勯犲嚱鏁般傚彲瑙侊紝鎷瘋礉鏋勯犲嚱鏁版槸涓縐嶇壒孌婄殑鏋勯犲嚱鏁幫紝鍑芥暟鐨勫悕縐板繀欏誨拰綾誨悕縐頒竴鑷達紝瀹冪殑鍞竴鐨勪竴涓弬鏁版槸鏈被鍨嬬殑涓涓紩鐢ㄥ彉閲忥紝璇ュ弬鏁版槸const綾誨瀷錛屼笉鍙彉鐨勩備緥濡傦細綾籜鐨勬嫹璐濇瀯閫犲嚱鏁扮殑褰㈠紡涓篨(X& x)銆?br /><br />銆銆褰撶敤涓涓凡鍒濆鍖栬繃浜嗙殑鑷畾涔夌被綾誨瀷瀵硅薄鍘誨垵濮嬪寲鍙︿竴涓柊鏋勯犵殑瀵硅薄鐨勬椂鍊欙紝鎷瘋礉鏋勯犲嚱鏁板氨浼氳鑷姩璋冪敤銆備篃灝辨槸璇達紝褰撶被鐨勫璞¢渶瑕佹嫹璐濇椂錛屾嫹璐濇瀯閫犲嚱鏁板皢浼氳璋冪敤銆備互涓嬫儏鍐甸兘浼氳皟鐢ㄦ嫹璐濇瀯閫犲嚱鏁幫細<br /><br />銆銆涓涓璞′互鍊間紶閫掔殑鏂瑰紡浼犲叆鍑芥暟浣?<br /><br />銆銆涓涓璞′互鍊間紶閫掔殑鏂瑰紡浠庡嚱鏁拌繑鍥?<br /><br />銆銆涓涓璞¢渶瑕侀氳繃鍙﹀涓涓璞¤繘琛屽垵濮嬪寲銆?<br /><br />銆銆濡傛灉鍦ㄧ被涓病鏈夋樉寮忓湴澹版槑涓涓嫹璐濇瀯閫犲嚱鏁幫紝閭d箞錛岀紪璇戝櫒灝嗕細鑷姩鐢熸垚涓涓粯璁ょ殑鎷瘋礉鏋勯犲嚱鏁幫紝璇ユ瀯閫犲嚱鏁板畬鎴愬璞′箣闂寸殑浣嶆嫹璐濄備綅鎷瘋礉鍙堢О嫻呮嫹璐濓紝鍚庨潰灝嗚繘琛岃鏄庛?<br /><br />銆銆鑷畾涔夋嫹璐濇瀯閫犲嚱鏁版槸涓縐嶈壇濂界殑緙栫▼椋庢牸錛屽畠鍙互闃繪緙栬瘧鍣ㄥ艦鎴愰粯璁ょ殑鎷瘋礉鏋勯犲嚱鏁幫紝鎻愰珮婧愮爜鏁堢巼銆?br /><br />銆銆<b>嫻呮嫹璐濆拰娣辨嫹璐?/b><br /><br />銆銆鍦ㄦ煇浜涚姸鍐典笅錛岀被鍐呮垚鍛樺彉閲忛渶瑕佸姩鎬佸紑杈熷爢鍐呭瓨錛屽鏋滃疄琛屼綅鎷瘋礉錛屼篃灝辨槸鎶婂璞¢噷鐨勫煎畬鍏ㄥ鍒剁粰鍙︿竴涓璞★紝濡侫=B銆傝繖鏃訛紝濡傛灉B涓湁涓涓垚鍛樺彉閲忔寚閽堝凡緇忕敵璇蜂簡鍐呭瓨錛岄偅A涓殑閭d釜鎴愬憳鍙橀噺涔熸寚鍚戝悓涓鍧楀唴瀛樸傝繖灝卞嚭鐜頒簡闂錛氬綋B鎶婂唴瀛橀噴鏀句簡錛堝錛氭瀽鏋勶級錛岃繖鏃禔鍐呯殑鎸囬拡灝辨槸閲庢寚閽堜簡錛屽嚭鐜拌繍琛岄敊璇?br /><br />銆銆娣辨嫹璐濆拰嫻呮嫹璐濆彲浠ョ畝鍗曠悊瑙d負錛氬鏋滀竴涓被鎷ユ湁璧勬簮錛屽綋榪欎釜綾葷殑瀵硅薄鍙戠敓澶嶅埗榪囩▼鐨勬椂鍊欙紝璧勬簮閲嶆柊鍒嗛厤錛岃繖涓繃紼嬪氨鏄繁鎷瘋礉錛屽弽涔嬶紝娌℃湁閲嶆柊鍒嗛厤璧勬簮錛屽氨鏄祬鎷瘋礉銆備笅闈婦涓繁鎷瘋礉鐨勪緥瀛愩?<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e7e9e9" border="1"><tbody><tr><td>#include <iostream><br />using namespace std;<br />class CA<br />{<br />銆public:<br />銆銆CA(int b,char* cstr)<br />銆銆{<br />銆銆銆a=b;<br />銆銆銆str=new char[b];<br />銆銆銆strcpy(str,cstr);<br />銆銆}<br />銆銆CA(const CA& C)<br />銆銆{<br />銆銆銆a=C.a;<br />銆銆銆str=new char[a]; //娣辨嫹璐?br />銆銆銆if(str!=0)<br />銆銆銆銆strcpy(str,C.str);<br />銆銆}<br />銆銆void Show()<br />銆銆{<br />銆銆銆cout<<str<<endl;<br />銆銆}<br />銆銆~CA()<br />銆銆{<br />銆銆銆delete str;<br />銆銆}<br />銆private:<br />銆銆int a;<br />銆銆char *str;<br />};<br /><br />int main()<br />{<br />銆CA A(10,"Hello!");<br />銆CA B=A;<br />銆B.Show();<br />銆return 0;<br />}</td></tr></tbody></table><br />銆銆濂藉惂錛屽氨璇磋繖浜涳紝甯屾湜鏈枃鑳藉鎮ㄦ湁鎵甯姪銆?img src ="http://m.shnenglu.com/zjj2816/aggbug/15831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zjj2816/" target="_blank">浜曟硥</a> 2006-12-01 08:52 <a href="http://m.shnenglu.com/zjj2816/archive/2006/12/01/15831.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浣撻獙C++涓帴鍙d笌瀹炵幇鍒嗙鐨勬妧鏈?/title><link>http://m.shnenglu.com/zjj2816/archive/2006/07/05/9419.html</link><dc:creator>浜曟硥</dc:creator><author>浜曟硥</author><pubDate>Wed, 05 Jul 2006 01:59:00 GMT</pubDate><guid>http://m.shnenglu.com/zjj2816/archive/2006/07/05/9419.html</guid><wfw:comment>http://m.shnenglu.com/zjj2816/comments/9419.html</wfw:comment><comments>http://m.shnenglu.com/zjj2816/archive/2006/07/05/9419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zjj2816/comments/commentRss/9419.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/zjj2816/services/trackbacks/9419.html</trackback:ping><description><![CDATA[鍦ㄧ敤C++鍐欒瀵煎嚭綾葷殑搴撴椂錛屾垜浠粡甯稿彧鎯蟲毚闇叉帴鍙o紝鑰岄殣钘忕被鐨勫疄鐜扮粏鑺傘備篃灝辨槸璇存垜浠彁渚涚殑澶存枃浠墮噷鍙彁渚涜鏆撮湶鐨勫叕鍏辨垚鍛樺嚱鏁扮殑澹版槑錛岀被鐨勫叾浠栨墍鏈変俊鎭兘涓嶄細鍦ㄨ繖涓ご鏂囦歡閲岄潰鏄劇ず鍑烘潵銆傝繖涓椂鍊欏氨瑕佺敤鍒版帴鍙d笌瀹炵幇鍒嗙鐨勬妧鏈?br /><br />銆銆涓嬮潰鐢ㄤ竴涓渶綆鍗曠殑渚嬪瓙鏉ヨ鏄庛?br /><br />銆銆綾籆lxExp鏄垜浠瀵煎嚭鐨勭被錛屽叾涓湁涓涓鏈夋垚鍛樺彉閲忔槸ClxTest綾葷殑瀵硅薄錛屽悇涓枃浠跺唴瀹瑰涓嬶細 <br /><br />銆銆lxTest.h鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>class ClxTest <br />{<br />銆public:<br />銆銆ClxTest();<br />銆銆virtual ~ClxTest();<br />銆銆void DoSomething();<br />};</td></tr></tbody></table><br />銆銆lxTest.cpp鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#include "lxTest.h"<br /><br />#include <iostream><br />using namespace std;<br /><br />ClxTest::ClxTest()<br />{}<br /><br />ClxTest::~ClxTest()<br />{}<br /><br />void ClxTest::DoSomething()<br />{<br />銆cout << "Do something in class ClxTest!" << endl;<br />}<br /><br />////////////////////////////////////////////////////////////////////////////</td></tr></tbody></table><br />銆銆lxExp.h鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#include "lxTest.h"<br /><br />class ClxExp <br />{<br />銆public:<br />銆銆ClxExp();<br />銆銆virtual ~ClxExp();<br />銆銆void DoSomething();<br />銆private:<br />銆銆ClxTest m_lxTest;<br />銆銆void lxTest();<br />};</td></tr></tbody></table><br />銆銆lxExp.cpp鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#include "lxExp.h"<br /><br />ClxExp::ClxExp()<br />{}<br /><br />ClxExp::~ClxExp()<br />{}<br /><br />// 鍏跺疄璇ユ柟娉曞湪榪欓噷騫舵病鏈夊繀瑕侊紝鎴戣繖鏍峰彧鏄負浜嗚鏄庤皟鐢ㄥ叧緋?br />void ClxExp::lxTest()<br />{<br />銆m_lxTest.DoSomething(); <br />}<br /><br />void ClxExp::DoSomething()<br />{<br />銆lxTest();<br />}</td></tr></tbody></table><br />銆銆涓轟簡璁╃敤鎴瘋兘浣跨敤鎴戜滑鐨勭被ClxExp錛屾垜浠繀欏繪彁渚沴xExp.h鏂囦歡錛岃繖鏍風被ClxExp鐨勭鏈夋垚鍛樹篃鏆撮湶緇欑敤鎴蜂簡銆傝屼笖錛屼粎浠呮彁渚沴xExp.h鏂囦歡鏄笉澶熺殑錛屽洜涓簂xExp.h鏂囦歡include浜唋xTest.h鏂囦歡錛屽湪榪欑鎯呭喌涓嬶紝鎴戜滑榪樿鎻愪緵lxTest.h鏂囦歡銆傞偅鏍稢lxExp綾葷殑瀹炵幇緇嗚妭灝卞叏鏆撮湶緇欑敤鎴蜂簡銆傚彟澶栵紝褰撴垜浠綾籆lxTest鍋氫簡淇敼錛堝娣誨姞鎴栧垹闄や竴浜涙垚鍛樺彉閲忔垨鏂規硶錛夋椂錛屾垜浠繕瑕佺粰鐢ㄦ埛鏇存柊lxTest.h鏂囦歡錛岃岃繖涓枃浠舵槸璺熸帴鍙f棤鍏崇殑銆傚鏋滅被ClxExp閲岄潰鏈夊緢澶氬儚m_lxTest閭f牱鐨勫璞$殑璇濓紝鎴戜滑灝辮緇欑敤鎴鋒彁渚汵涓儚lxTest.h閭f牱鐨勫ご鏂囦歡錛岃屼笖鍏朵腑浠諱綍涓涓被鏈夋敼鍔紝鎴戜滑閮借緇欑敤鎴鋒洿鏂板ご鏂囦歡銆傝繕鏈変竴鐐瑰氨鏄敤鎴峰湪榪欑鎯呭喌涓嬪繀欏昏繘琛岄噸鏂扮紪璇戯紒<br /><br />銆銆涓婇潰鏄潪甯稿皬鐨勪竴涓緥瀛愶紝閲嶆柊緙栬瘧鐨勬椂闂村彲浠ュ拷鐣ヤ笉璁°備絾鏄紝濡傛灉綾籆lxExp琚敤鎴峰ぇ閲忎嬌鐢ㄧ殑璇濓紝閭d箞鍦ㄤ竴涓ぇ欏圭洰涓紝閲嶆柊緙栬瘧鐨勬椂鍊欐垜浠氨鏈夋椂闂村彲浠ュ幓鍠濇澂鍜栧暋浠涔堢殑浜嗐傚綋鐒朵笂闈㈢殑縐嶇鎯呭喌涓嶆槸鎴戜滑鎯崇湅鍒扮殑錛佷綘涔熷彲浠ユ兂鍍忎竴涓嬬敤鎴峰湪鑷繁紼嬪簭涓嶇敤鏀瑰姩鐨勬儏鍐典笅瑕佷笉鍋滅殑鏇存柊澶存枃浠跺拰緙栬瘧鏃訛紝浠栦滑蹇冮噷浼氶獋浜涗粈涔堛傚叾瀹炲鐢ㄦ埛鏉ヨ錛屼粬浠彧鍏沖績綾籆lxExp鐨勬帴鍙oSomething()鏂規硶銆傞偅鎴戜滑鎬庝箞鎵嶈兘鍙毚闇茬被ClxExp鐨凞oSomething()鏂規硶鑰屼笉鍙堜駭鐢熶笂闈㈡墍璇寸殑閭d簺闂鍛紵絳旀灝辨槸錛嶏紞鎺ュ彛涓庡疄鐜扮殑鍒嗙銆傛垜鍙互璁╃被ClxExp瀹氫箟鎺ュ彛錛岃屾妸瀹炵幇鏀懼湪鍙﹀涓涓被閲岄潰銆備笅闈㈡槸鍏蜂綋鐨勬柟娉曪細<br /><br />銆銆棣栧厛錛屾坊鍔犱竴涓疄鐜扮被ClxImplement鏉ュ疄鐜癈lxExp鐨勬墍鏈夊姛鑳姐傛敞鎰忥細綾籆lxImplement鏈夌潃璺熺被ClxExp涓鏍風殑鍏湁鎴愬憳鍑芥暟錛屽洜涓轟粬浠殑鎺ュ彛瑕佸畬鍏ㄤ竴鑷淬?br /><br />銆銆lxImplement.h鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#include "lxTest.h"<br /><br />class ClxImplement <br />{<br />銆public:<br />銆銆ClxImplement();<br />銆銆virtual ~ClxImplement();<br /><br />銆銆void DoSomething();<br />銆<br />銆private:<br />銆銆ClxTest m_lxTest;<br />銆銆void lxTest();<br />};</td></tr></tbody></table><br />銆銆lxImplement.cpp鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#include "lxImplement.h"<br /><br />ClxImplement::ClxImplement()<br />{}<br /><br />ClxImplement::~ClxImplement()<br />{}<br /><br />void ClxImplement::lxTest()<br />{<br />銆m_lxTest.DoSomething();<br />}<br /><br />void ClxImplement::DoSomething()<br />{<br />銆lxTest();<br />}</td></tr></tbody></table><br />銆銆鐒跺悗錛屼慨鏀圭被ClxExp銆?br /><br />銆銆淇敼鍚庣殑lxExp.h鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>// 鍓嶇疆澹版槑<br />class ClxImplement;<br /><br />class ClxExp <br />{<br />銆public:<br />銆銆ClxExp();<br />銆銆virtual ~ClxExp();<br />銆銆void DoSomething();<br />銆private:<br />銆銆// 澹版槑涓涓被ClxImplement鐨勬寚閽堬紝涓嶉渶瑕佺煡閬撶被ClxImplement鐨勫畾涔?br />銆銆ClxImplement *m_pImpl;<br />};</td></tr></tbody></table><br />銆銆淇敼鍚庣殑lxExp.cpp鏂囦歡鍐呭錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>// 鍦ㄨ繖閲屽寘鍚被ClxImplement鐨勫畾涔夊ご鏂囦歡<br />#include "lxImplement.h"<br /><br />ClxExp::ClxExp()<br />{<br />銆m_pImpl = new ClxImplement;<br />}<br /><br />ClxExp::~ClxExp()<br />{<br />銆delete m_pImpl;<br />}<br /><br />void ClxExp::DoSomething()<br />{<br />銆m_pImpl->DoSomething();<br />}</td></tr></tbody></table><br />銆銆閫氳繃涓婇潰鐨勬柟娉曞氨瀹炵幇浜嗙被ClxExp鐨勬帴鍙d笌瀹炵幇鐨勫垎紱匯傝娉ㄦ剰涓や釜鏂囦歡涓殑娉ㄩ噴銆傜被ClxExp閲岄潰澹版槑鐨勫彧鏄帴鍙h屽凡錛岃岀湡姝g殑瀹炵幇緇嗚妭琚殣钘忓埌浜嗙被ClxImplement閲岄潰銆備負浜嗚兘鍦ㄧ被ClxExp涓嬌鐢ㄧ被ClxImplement鑰屼笉include澶存枃浠秎xImplement.h錛屽氨蹇呴』鏈夊墠緗0鏄巆lass ClxImplement錛岃屼笖鍙兘浣跨敤鎸囧悜綾籆lxImplement瀵硅薄鐨勬寚閽堬紝鍚﹀垯灝變笉鑳介氳繃緙栬瘧銆?br /><br />銆銆鍦ㄥ彂甯冨簱鏂囦歡鐨勬椂鍊欙紝鎴戜滑鍙渶緇欑敤鎴鋒彁渚涗竴涓ご鏂囦歡lxExp.h灝辮浜嗭紝涓嶄細鏆撮湶綾籆lxExp鐨勪換浣曞疄鐜扮粏鑺傘傝屼笖鎴戜滑瀵圭被ClxTest鐨勪換浣曟敼鍔紝閮戒笉闇瑕佸啀緇欑敤鎴鋒洿鏂板ご鏂囦歡錛堝綋鐒訛紝搴撴枃浠舵槸瑕佹洿鏂扮殑錛屼絾鏄繖縐嶆儏鍐典笅鐢ㄦ埛涔熶笉鐢ㄩ噸鏂扮紪璇戯紒錛夈傝繖鏍峰仛榪樻湁涓涓ソ澶勫氨鏄紝鍙互鍦ㄥ垎鏋愰樁孌電敱緋葷粺鍒嗘瀽鍛樻垨鑰呴珮綰х▼搴忓憳鏉ュ厛鎶婄被鐨勬帴鍙e畾涔夊ソ錛岀敋鑷沖彲浠ユ妸鎺ュ彛浠g爜鍐欏ソ錛堜緥濡備笂闈慨鏀瑰悗鐨刲xExp.h鏂囦歡鍜宭xExp.cpp鏂囦歡錛夛紝鑰屾妸綾葷殑鍏蜂綋瀹炵幇浜ょ粰鍏朵粬紼嬪簭鍛樺紑鍙戙?<img src ="http://m.shnenglu.com/zjj2816/aggbug/9419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zjj2816/" target="_blank">浜曟硥</a> 2006-07-05 09:59 <a href="http://m.shnenglu.com/zjj2816/archive/2006/07/05/9419.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C++ Primer璇諱功絎旇http://m.shnenglu.com/zjj2816/archive/2006/06/29/9151.html浜曟硥浜曟硥Thu, 29 Jun 2006 07:11:00 GMThttp://m.shnenglu.com/zjj2816/archive/2006/06/29/9151.htmlhttp://m.shnenglu.com/zjj2816/comments/9151.htmlhttp://m.shnenglu.com/zjj2816/archive/2006/06/29/9151.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/9151.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/9151.html鍥犱負鍒氬C++涓嶄箙錛岀瑪涓嬮毦鍏嶆湁璋涔嬪錛岃鏂囨洿鏄噷涔憋紱
鎵騫鎬笉鏄敤鏉ユ樉閰嶇殑涓滆タ錛屽彂鍦╨inuxsir鍙槸涓轟簡鏂逛究鑷繁闃呰璁板繂錛屼互闃插彧欏句笂緗戝繕浜嗘浜嬨?br />涔︾湅浜嗕笉鍒頒竴鍗婏紝鎵浠ュぇ綰︽墠鍐欎簡涓鍗婏紝鎱㈡參琛ュ厖銆?br />=========================================


==========================================
杞澆鍔″繀娉ㄦ槑鍘熶綔鑰?br />neplusultra 2005.2.3
==========================================


const瑕佹敞鎰忕殑闂
銆銆1銆佷笅闈㈡槸涓涓嚑涔庢墍鏈変漢鍒氬紑濮嬮兘浼氭悶閿欑殑闂錛?br />宸茬煡錛歵ypedef char *cstring;
鍦ㄤ互涓嬪0鏄庝腑錛宑str鐨勭被鍨嬫槸浠涔堬紵
extern const cstring cstr;

閿欒絳旀錛歝onst char *cstr;
姝g‘絳旀錛歝har *const cstr;

銆銆閿欒鍦ㄤ簬灝唗ypedef褰撲綔瀹忔墿灞曘俢onst 淇グcstr鐨勭被鍨嬨俢str鏄竴涓寚閽堬紝鍥犳錛岃繖涓畾涔夊0鏄庝簡cstr鏄竴涓寚鍚戝瓧絎︾殑const鎸囬拡銆?br />銆銆2銆佹寚閽堟槸const榪樻槸data涓篶onst錛?br />杈ㄥ埆鏂規硶寰堢畝鍗曪紝濡備笅錛?br />
浠g爜:
char *p="hello"; //non-const pointer, non-const data; const char *p="hello"; // non-const pointer, const data; char * const p="hello"; // const pointer , non-const data; const char * const p="hello"; // const pointer, const data;
銆銆瑕佹敞鎰忕殑鏄紝"hello"鐨勭被鍨嬫槸const char * 錛屾寜C++standard瑙勫垯錛宑har *p="hello" 鏄潪娉曠殑(鍙沖紡鐨刢onst char* 涓嶈兘杞崲涓哄乏寮忕殑char *)錛岃繚鍙嶄簡甯擱噺鎬с備絾鏄繖縐嶈涓哄湪C涓疄鍦ㄥお棰戠箒錛屽洜姝++standard瀵逛簬榪欑鍒濆鍖栧姩浣滅粰浜堣眮鍏嶃傚敖綆″姝わ紝榪樻槸灝介噺閬垮厤榪欑鐢ㄦ硶銆?br />銆銆3銆乧onst鍒濆鍖栫殑涓浜涢棶棰?br />const 瀵硅薄蹇呴』琚垵濮嬪寲錛?br />
浠g爜:
const int *pi=new int; // 閿欒錛屾病鏈夊垵濮嬪寲 const int *pi=new int(100); //姝g‘ const int *pci=new const int[100]; //緙栬瘧閿欒錛屾棤娉曞垵濮嬪寲鐢╪ew琛ㄨ揪寮忓垱寤虹殑鍐呯疆綾誨瀷鏁扮粍鍏冪礌銆?/div>

浠涔堟椂鍊欓渶瑕乧opy constructor,copy assignment operator,destructor
銆銆娉ㄦ剰錛岃嫢class闇瑕佷笁鑰呬箣涓錛岄偅涔堝畠寰寰闇瑕佷笁鑰呫?br />褰揷lass鐨刢opy constructor鍐呭垎閰嶆湁涓鍧楁寚鍚慼cap鐨勫唴瀛橈紝闇瑕佺敱destructor閲婃斁錛岄偅涔堝畠涔熷線寰闇瑕佷笁鑰呫?br />
涓轟粈涔堥渶瑕乸rotected 璁塊棶綰у埆
銆銆鏈変漢璁や負錛宲rotected璁塊棶綰у埆鍏佽媧劇敓綾葷洿鎺ヨ闂熀綾繪垚鍛橈紝榪欑牬鍧忎簡灝佽鐨勬蹇碉紝鍥犳鎵鏈夊熀綾葷殑瀹炵幇緇嗚妭閮藉簲璇ユ槸private鐨勶紱鍙﹀涓浜涗漢璁や負錛屽鏋滄淳鐢熺被涓嶈兘鐩存帴璁塊棶鍩虹被鐨勬垚鍛橈紝閭d箞媧劇敓綾葷殑瀹炵幇灝嗘棤娉曟湁瓚沖鐨勬晥鐜囦緵鐢ㄦ埛浣跨敤錛屽鏋滄病鏈塸rotected錛岀被鐨勮璁¤呭皢琚揩鎶婂熀綾繪垚鍛樿緗負public銆?br />銆銆浜嬪疄涓婏紝protected姝f槸鍦ㄩ珮綰害鐨勫皝瑁呬笌鏁堢巼涔嬮棿鍋氬嚭鐨勪竴涓壇濂芥姌琛鋒柟妗堛?br />
涓轟粈涔堥渶瑕乿irtual member function鍙堜笉鑳芥互鐢╲irtual
銆銆鑻ュ熀綾昏璁¤呮妸鏈簲璁捐鎴恦irtual鐨勬垚鍛樺嚱鏁拌璁℃垚闈瀡irtual錛屽垯緇ф壙綾誨皢鏃犳硶瀹炵幇鏀瑰啓(overridden)錛岀粰緇ф壙綾葷殑瀹炵幇甯︽潵涓嶄究錛?br />銆銆鍙︿竴鏂歸潰錛屼竴鏃︽垚鍛樺嚱鏁拌璁捐鎴恦irtual錛屽垯璇ョ被鐨勫璞″皢棰濆澧炲姞铏氭嫙鎸囬拡錛坴ptr錛夊拰铏氭嫙琛ㄦ牸錛坴tbl錛夛紝鎵浠ュ樿嫢鍑轟簬鏂逛究緇ф壙綾籵verridden鐨勭洰鐨勮屼嬌鎵鏈夋垚鍛樺嚱鏁伴兘涓簐irtual錛屽彲鑳戒細褰卞搷鏁堢巼錛屽洜涓烘瘡涓獀irtual鎴愬憳鍑芥暟閮介渶浠樺嚭鍔ㄦ佸垎媧劇殑鎴愭湰銆傝屼笖virtual鎴愬憳鍑芥暟涓嶈兘鍐呰仈錛坕nline錛夛紝鎴戜滑鐭ラ亾錛屽唴鑱斿彂鐢熷湪緙栬瘧鏃跺埢錛岃岃櫄鎷熷嚱鏁板湪榪愯鏃跺埢鎵嶅鐞嗐傚浜庨偅浜涘皬宸ц岃棰戠箒璋冪敤銆佷笌綾誨瀷鏃犲叧鐨勫嚱鏁幫紝鏄劇劧涓嶅簲璇ヨ璁劇疆鎴恦irtual銆?br />
鍏充簬寮曠敤鐨勪竴浜涙敞鎰忕偣
銆銆1銆佹妸鍑芥暟鍙傛暟澹版槑涓烘暟緇勭殑寮曠敤錛氬綋鍑芥暟鍙傛暟鏄竴涓暟緇勭被鍨嬬殑寮曠敤鏃訛紝鏁扮粍闀垮害鎴愪負鍙傛暟鍜屽疄鍙傜被鍨嬬殑涓閮ㄥ垎錛岀紪璇戝櫒媯鏌ユ暟緇勫疄鍙傜殑闀垮害鍜屼笌鍦ㄥ嚱鏁板弬鏁扮被鍨嬩腑鎸囧畾鐨勯暱搴︽槸鍚﹀尮閰嶃?br />
浠g爜:
//鍙傛暟涓?0涓猧nt鏁扮粍 void showarr(int (&arr)[10]); void func() { int i,j[2],k[10]; showarr(i); //閿欒錛佸疄鍙傚繀欏繪槸10涓猧nt鐨勬暟緇? showarr(j); //閿欒錛佸疄鍙傚繀欏繪槸10涓猧nt鐨勬暟緇? showarr(k); //姝g‘錛? } //鏇寸伒媧葷殑瀹炵幇錛屽熷姪鍑芥暟妯℃澘銆備笅闈㈡槸涓涓樉紺烘暟緇勫唴瀹圭殑鍑芥暟銆? template <typename Type , int size> void printarr(const Type (& r_array)[size]) { for(int i=0;i<size;i++) std::cout<< r_array[i] <<' '; std::cout << std::endl; } void caller() { int ar[5]={1,2,5,3,4}; //鏁扮粍鍙互浠繪剰澶у皬銆? printarr(ar); //姝g‘錛佽嚜鍔ㄦ紜皟鐢╬rintarr() }
銆銆2銆?br />銆銆3銆?br />
goto璇彞鐨勪竴浜涜娉ㄦ剰鐨勫湴鏂?/font>
銆銆1銆乴abel璇彞鍙兘鐢ㄤ綔goto鐨勭洰鏍囷紝涓攍abel璇彞鍙兘鐢ㄥ啋鍙風粨鏉燂紝涓攍abel璇彞鍚庨潰涓嶈兘绱ф帴鍙寵姳鎷彿'}'錛屽
浠g爜:
label8: }
銆銆鍔炴硶鏄湪鍐掑彿鍚庨潰鍔犱竴涓┖璇彞錛堜竴涓?;'鍗沖彲錛夛紝濡?br />
浠g爜:
label7: ;}
銆銆 2銆乬oto璇彞涓嶈兘鍚戝墠璺寵繃濡備笅澹版槑璇彞錛?br />
浠g爜:
goto label6; int x=1; //閿欒錛屼笉鑳借煩榪囪澹版槑錛? cout<<x<<endl; //浣跨敤x label6: //鍏朵粬璇彞
浣嗘槸錛屾妸int x=1; 鏀逛負int x; 鍒欐紜簡銆傚彟澶栦竴縐嶆柟娉曟槸錛?br />
浠g爜:
goto label6; { int x=1; //姝g‘錛屼嬌鐢ㄤ簡璇彞蹇? cout<<x<<endl; } label6: //鍏朵粬璇彞
銆銆3銆乬oto璇彞鍙互鍚戝悗錛堝悜紼嬪簭寮澶寸殑鏂瑰悜錛夎煩榪囧0鏄庡畾涔夎鍙ャ?br />
浠g爜:
begin: int i=22; cout<< i <<endl; goto begin; //闈炲父韞╄剼錛屼絾瀹冩槸姝g‘鐨?/div>

鍙橀噺浣滅敤鍩?/font>
銆銆1銆佽姳鎷彿鍙互鐢ㄦ潵鎸囨槑灞閮ㄤ綔鐢ㄥ煙銆?br />銆銆2銆佸湪for銆乮f銆乻witch銆亀hile璇彞鐨勬潯浠?寰幆鏉′歡涓彲浠ュ0鏄庡彉閲忥紝璇ュ彉閲忎粎鍦ㄧ浉搴旇鍙ュ潡鍐呮湁鏁堛?br />銆銆3銆乪xtern涓哄0鏄庝絾涓嶅畾涔変竴涓璞℃彁渚涗簡涓縐嶆柟娉曪紱瀹冪被浼間簬鍑芥暟澹版槑錛屾寚鏄庤瀵硅薄浼氬湪鍏朵粬鍦版柟琚畾涔夛細鎴栬呭湪姝ゆ枃鏈殑鍏朵粬鍦版柟錛屾垨鑰呭湪紼嬪簭鐨勫叾浠栨枃鏈枃浠朵腑銆備緥濡俥xtern int i; 琛ㄧず鍦ㄥ叾浠栧湴鏂瑰瓨鍦ㄥ0鏄?int i;
銆銆extern 澹版槑涓嶄細寮曡搗鍐呭瓨鍒嗛厤錛屼粬鍙互鍦ㄥ悓涓涓枃浠舵垨鍚屼竴涓▼搴忎腑鍑虹幇澶氭銆傚洜姝ゅ湪鍏ㄥ眬浣滅敤鍩熶腑錛屼互涓嬭鍙ユ槸姝g‘鐨勶細
浠g爜:
extern int c; int c=1; //娌¢敊 extern int c; //娌¢敊
銆銆浣嗘槸錛宔xtern澹版槑鑻ユ寚瀹氫簡涓涓樉寮忓垵濮嬪肩殑鍏ㄥ眬瀵硅薄錛屽皢琚涓哄璇ュ璞$殑瀹氫箟錛岀紪璇戝櫒灝嗕負鍏跺垎閰嶅瓨鍌ㄥ尯錛涘璇ュ璞$殑鍚庣畫瀹氫箟灝嗗嚭閿欍傚涓嬶細
浠g爜:
extern int i=1; int i=2; //鍑洪敊錛侀噸澶嶅畾涔?/div>

auto_ptr鑻ュ共娉ㄦ剰鐐?/font>
銆銆1銆乤uto_ptr鐨勪富瑕佺洰鐨勬槸鏀寔鏅氭寚閽堢被鍨嬬浉鍚岀殑璇硶錛屽茍涓篴uto_ptr鎵鎸囧璞$殑閲婃斁鎻愪緵鑷姩綆$悊錛岃屼笖auto_ptr鐨勫畨鍏ㄦу嚑涔庝笉浼氬甫鏉ラ澶栫殑浠d環錛堝洜涓哄叾鎿嶄綔鏀寔閮芥槸鍐呰仈鐨勶級銆傚畾涔夊艦寮忔湁涓夌錛?br />
浠g爜:
auto_ptr<type_pointed_to>identifier(ptr_allocated_by_new); auto_ptr<type_pointed_to>identifier(auto_ptr_of_same_type); auto_ptr<type_pointed_to>identifier;
銆銆2銆佹墍鏈夋潈姒傚康銆俛uto_ptr_p1=auto_ptr_p2鐨勫悗鏋滄槸錛宎uto_ptr_p2涓уけ浜嗗叾鍘熸寚鍚戝璞$殑鎵鏈夋潈錛屽茍涓攁uto_ptr_p2.get()==0銆備笉瑕佽涓や釜auto_ptr瀵硅薄鎷ユ湁絀洪棽瀛樺偍鍖哄唴鍚屼竴瀵硅薄鐨勬墍鏈夋潈銆傛敞鎰忎互涓嬩袱縐嶇鍒濆鍖栨柟寮忕殑鍖哄埆錛?br />
浠g爜:
auto_ptr<string>auto_ptr_str1(auto_ptr_str2.get()); //娉ㄦ剰錛佺敤str2鎸囬拡鍒濆鍖杝tr1, 涓よ呭悓鏃舵嫢鏈夋墍鏈夋潈錛屽悗鏋滄湭瀹氫箟銆? auto_ptr<string>auto_ptr_str1(auto_ptr_str2.release());//OK錛乻tr2閲婃斁浜嗘墍鏈夋潈銆?

銆銆3銆佷笉鑳界敤涓涓寚鍚戔滃唴瀛樹笉鏄氳繃搴旂敤new琛ㄨ揪寮忓垎閰嶇殑鈥濇寚閽堟潵鍒濆鍖栨垨鑰呰祴鍊糰uto_ptr銆傚鏋滆繖鏍峰仛浜嗭紝delete琛ㄨ揪寮忎細琚簲鐢ㄥ湪涓嶆槸鍔ㄦ佸垎閰嶇殑鎸囬拡涓婏紝榪欏皢瀵艱嚧鏈畾涔夌殑紼嬪簭琛屼負銆?br />
C椋庢牸瀛楃涓茬粨灝劇┖瀛楃闂

浠g爜:
char *str="hello world!"; //str鏈熬鑷姩鍔犱笂涓涓粨灝劇┖瀛楃錛屼絾strlen涓嶈璇ョ┖瀛楃銆? char *str2=new char[strlen(str)+1] // +1鐢ㄦ潵瀛樻斁緇撳熬絀哄瓧絎︺?/div>


瀹氫綅new琛ㄨ揪寮?/font>
銆銆澶存枃浠訛細<new>
銆銆褰㈠紡錛歯ew (place_address) type-specifier
銆銆璇ヨ鍙ュ彲浠ュ厑璁哥▼搴忓憳灝嗗璞″垱寤哄湪宸茬粡鍒嗛厤濂界殑鍐呭瓨涓紝鍏佽紼嬪簭鍛橀鍒嗛厤澶ч噺鐨勫唴瀛樹緵浠ュ悗閫氳繃榪欑褰㈠紡鐨刵ew琛ㄨ揪寮忓垱寤哄璞°傚叾涓璸lace_address蹇呴』鏄竴涓寚閽堛備緥濡傦細
浠g爜:
char *buf=new char[sizeof(myclass-type)*16]; myclass-type *pb=new (buf) myclass-type; //浣跨敤棰勫垎閰嶇┖闂存潵鍒涘緩瀵硅薄 // ... delete [] buf; // 鏃犻』 delete pb銆?/div>


鍚嶅瓧絀洪棿namespace

銆銆1銆乶amespace鐨勫畾涔夊彲浠ユ槸涓嶈繛緇殑錛堝嵆namespace鐨勫畾涔夋槸鍙互縐瘡鐨勶級錛屽嵆錛屽悓涓涓猲amespace鍙互鍦ㄤ笉鍚岀殑鏂囦歡涓畾涔夛紝鍒嗘暎鍦ㄤ笉鍚屾枃浠朵腑鐨勫悓涓涓猲amespace涓殑鍐呭褰兼鍙銆傝繖瀵圭敓鎴愪竴涓簱寰堟湁甯姪錛屽彲浠ヤ嬌鎴戜滑鏇村鏄撳皢搴撶殑婧愪唬鐮佺粍緇囨垚鎺ュ彛鍜屽疄鐜伴儴鍒嗐傚錛氬湪澶存枃浠訛紙.h鏂囦歡錛夌殑鍚嶅瓧絀洪棿閮ㄥ垎瀹氫箟搴撴帴鍙o紱鍦ㄥ疄鐜版枃浠訛紙濡?c鎴?cpp鏂囦歡錛夌殑鍚嶅瓧絀洪棿閮ㄥ垎瀹氫箟搴撳疄鐜般傚悕瀛楃┖闂村畾涔夊彲縐瘡鐨勭壒鎬ф槸鈥滃悜鐢ㄦ埛闅愯棌瀹炵幇緇嗚妭鈥濆繀闇鐨勶紝瀹冨厑璁告妸涓嶅悓鐨勫疄鐜版枃浠訛紙濡?c鎴?cpp鏂囦歡錛夌紪璇戦摼鎺ュ埌涓涓▼搴忎腑錛岃屼笉浼氭湁緙栬瘧閿欒鍜岄摼鎺ラ敊璇?br />銆銆2銆佸叏灞鍚嶅瓧絀洪棿鎴愬憳錛屽彲浠ョ敤鈥?:member_name鈥濈殑鏂瑰紡寮曠敤銆傚綋鍏ㄥ眬鍚嶅瓧絀洪棿鐨勬垚鍛樿宓屽鐨勫眬閮ㄥ煙涓0鏄庣殑鍚嶅瓧闅愯棌鏃訛紝灝卞彲浠ラ噰鐢ㄨ繖縐嶆柟娉曞紩鐢ㄥ叏灞鍚嶅瓧絀洪棿鎴愬憳銆?br />銆銆3銆佸悕瀛楃┖闂存垚鍛樺彲浠ヨ瀹氫箟鍦ㄥ悕瀛楃┖闂翠箣澶栥備絾鏄紝鍙湁鍖呭洿璇ユ垚鍛樺0鏄庣殑鍚嶅瓧絀洪棿錛堜篃灝辨槸璇ユ垚鍛樺0鏄庢墍鍦ㄧ殑鍚嶅瓧絀洪棿鍙婂叾澶栧洿鍚嶅瓧絀洪棿錛夋墠鍙互鍖呭惈瀹冪殑瀹氫箟銆?br />銆銆灝ゅ叾瑕佹敞鎰忕殑鏄?include璇彞鐨勬搴忋傚亣瀹氬悕瀛楃┖闂存垚鍛榤ynamespace::member_i鐨勫0鏄庡湪鏂囦歡dec.h涓紝涓?include "dec.h"璇彞緗簬鍏ㄥ眬鍚嶅瓧絀洪棿錛岄偅涔堝湪include璇彞涔嬪悗瀹氫箟鐨勫叾浠栧悕瀛楃┖闂村唴錛宮ynamespace::member_i鐨勫0鏄庡潎鍙銆傚嵆錛宮ynamespace::member_i鍙互鍦?include "dec.h"涔嬪悗鐨勪換浣曞湴鏂逛換浣曞悕瀛楃┖闂村唴瀹氫箟銆?br />銆銆4銆佹湭鍛藉悕鐨勫悕瀛楃┖闂淬傛垜浠彲浠ョ敤鏈懡鍚嶇殑鍚嶅瓧絀洪棿澹版槑涓涓眬閮ㄤ簬鏌愪竴鏂囦歡鐨勫疄浣撱傛湭鍛藉悕鐨勫悕瀛楃┖闂村彲浠amespace寮澶達紝鍏跺悗涓嶉渶鍚嶅瓧錛岃岀敤涓瀵硅姳鎷彿鍖呭惈鍚嶅瓧絀洪棿澹版槑鍧椼傚錛?br />
浠g爜:
//銆鍏朵粬浠g爜鐣? namespace { void mesg() { cout<<"**********\n"; } } int main() { mesg();銆//姝g‘ 銆銆銆銆//... return 0; }
銆銆鐢變簬鏈懡鍚嶅悕瀛楃┖闂寸殑鎴愬憳鏄▼搴忓疄浣擄紝鎵浠esg()鍙互鍦ㄧ▼搴忔暣涓墽琛屾湡闂磋璋冪敤銆備絾鏄紝鏈懡鍚嶅悕瀛楃┖闂存垚鍛樺彧鍦ㄧ壒瀹氱殑鏂囦歡涓彲瑙侊紝鍦ㄦ瀯鎴愮▼搴忕殑鍏朵粬鏂囦歡涓槸涓嶅彲浠ヨ鐨勩傛湭鍛藉悕鍚嶅瓧絀洪棿鐨勬垚鍛樹笌琚0鏄庝負static鐨勫叏灞瀹炰綋鍏鋒湁綾諱技鐨勭壒鎬с傚湪錛d腑錛岃澹版槑涓簊tatic鐨勫叏灞瀹炰綋鍦ㄥ0鏄庡畠鐨勬枃浠朵箣澶栨槸涓嶅彲瑙佺殑銆?br />
using鍏抽敭瀛?/font>
銆銆1銆乽sing澹版槑涓巙sing鎸囩ず絎︼細鍓嶈呮槸澹版槑鏌愬悕瀛楃┖闂村唴鐨勪竴涓垚鍛橈紝鍚庤呮槸浣跨敤鏁翠釜鍚嶅瓧絀洪棿銆備緥濡傦細
浠g爜:
using cpp_primer::matrix; // ok,using澹版槑 using namespace cpp_primer; //ok,using鎸囩ず絎?/div>
銆銆2銆?璇sing鎸囩ず絎﹁鍙ュ彲浠ュ姞鍦ㄧ▼搴忔枃浠剁殑鍑犱箮浠諱綍鍦版柟錛屽寘鎷枃浠跺紑澶達紙#include璇彞涔嬪墠錛夈佸嚱鏁板唴閮ㄣ備笉榪囩敤using鎸囧畾鐨勫悕瀛楃┖闂翠綔鐢ㄥ煙錛堢敓鍛藉懆鏈燂級鍙梪sing璇彞鎵鍦ㄤ綅緗殑鐢熷懡鍛ㄦ湡綰︽潫銆傚錛屽嚱鏁板唴閮ㄤ嬌鐢ㄢ渦sing namespace myspacename;鈥濆垯 myspacename浠呭湪璇ュ嚱鏁板唴閮ㄥ彲瑙併?br />銆銆3銆佸彲浠ョ敤using璇彞鎸囧畾澶氫釜鍚嶅瓧絀洪棿錛屼嬌寰楀涓悕瀛楃┖闂村悓鏃跺彲瑙併備絾榪欏鍔犱簡鍚嶅瓧姹℃煋鐨勫彲鑳芥э紝鑰屼笖鍙湁鍦?font color="blue">浣跨敤
鍚勫悕瀛楃┖闂寸浉鍚屾垚鍛樻椂鐢卞涓猽sing鎸囩ず絎﹀紩璧風殑浜屼箟鎬ч敊璇墠鑳借媯嫻嬪埌錛岃繖灝嗙粰紼嬪簭鐨勬嫻嬨佹墿灞曘佺Щ妞嶅甫鏉ュ緢澶х殑闅愭偅銆傚洜姝わ紝鍥犺灝介噺浣跨敤using澹版槑鑰屼笉鏄互鐢╱sing鎸囩ず絎︺?br />
閲嶈澆鍑芥暟
銆銆1銆佸鏋滀袱涓嚱鏁扮殑鍙傛暟琛ㄤ腑鍙傛暟鐨勪釜鏁版垨鑰呯被鍨嬩笉鍚岋紝鍒欒涓鴻繖涓や釜鍑芥暟鏄噸杞界殑銆?br />銆銆濡傛灉涓や釜鍑芥暟鐨勮繑鍥炵被鍨嬪拰鍙傛暟琛ㄧ簿紜尮閰嶏紝鍒欑浜屼釜澹版槑琚涓虹涓涓殑閲嶅澹版槑錛屼笌鍙傛暟鍚嶆棤鍏熾傚 void print(string& str)涓巚oid print(string&)鏄竴鏍風殑銆?br />銆銆濡傛灉涓や釜鍑芥暟鐨勫弬鏁拌〃鐩稿悓錛屼絾鏄繑鍥炵被鍨嬩笉鍚岋紝鍒欑浜屼釜澹版槑琚涓虹涓涓殑閿欒閲嶅澹版槑錛屼細鏍囪涓虹紪璇戦敊璇?br />銆銆濡傛灉鍦ㄤ袱涓嚱鏁扮殑鍙傛暟琛ㄤ腑錛屽彧鏈夌己鐪佸疄鍙備笉鍚岋紝鍒欑浜屼釜澹版槑琚涓虹涓涓殑閲嶅澹版槑銆傚int max(int *ia,int sz)涓巌nt max(int *, int=10)銆?br />銆銆鍙傛暟鍚嶇被鍨嬪鏋滄槸鐢眛ypedef鎻愪緵鐨勶紝騫朵笉綆椾綔鏂扮被鍨嬶紝鑰屽簲璇ュ綋浣渢ypedef鐨勫師綾誨瀷銆?br />銆銆褰撳弬鏁扮被鍨嬫槸const鎴栬卾olatile鏃訛紝鍒嗕袱縐嶆儏鍐碉細瀵逛簬瀹炲弬鎸夊間紶閫掓椂錛宑onst銆乿olatile淇グ絎﹀彲浠ュ拷鐣ワ紱瀵逛簬鎶奵onst銆乿olatile搴旂敤鍦ㄦ寚閽堟垨鑰呭紩鐢ㄥ弬鏁版寚鍚戠殑綾誨瀷鏃訛紝const銆乿olatile淇グ絎﹀浜庨噸杞藉嚱鏁扮殑澹版槑鏄湁浣滅敤鐨勩備緥濡傦細
浠g爜:
//OK,浠ヤ笅涓や釜澹版槑鍏跺疄涓鏍? void func(int i); void func(const int i); //Error,鏃犳硶閫氳繃緙栬瘧錛屽洜涓篺unc鍑芥暟琚畾涔変簡涓ゆ銆? void func(int i){} void func(const int i){} //OK,澹版槑浜嗕笉鍚岀殑鍑芥暟 void func2(int *); void func2(const int *); //OK,澹版槑浜嗕笉鍚岀殑鍑芥暟 void func3(int&); void func3(const int&);
銆銆2銆侀摼鎺ユ寚紺虹extern "C"鍙兘鎸囧畾閲嶈澆鍑芥暟闆嗕腑鐨勪竴涓嚱鏁般傚師鍥犱笌鍐呴儴鍚嶇紪鐮佹湁鍏籌紝鍦ㄥぇ澶氭暟緙栬瘧鍣ㄥ唴閮紝姣忎釜鍑芥暟鏄庡強鍏剁浉鍏沖弬鏁拌〃閮借浣滀負涓涓儫涓鐨勫唴閮ㄥ悕緙栫爜錛屼竴鑸殑鍋氭硶鏄妸鍙傛暟鐨勪釜鏁板拰綾誨瀷閮借繘琛岀紪鐮侊紝鐒跺悗灝嗗叾闄勫湪鍑芥暟鍚嶅悗闈€備絾鏄繖縐嶇紪鐮佷笉浣跨敤浜庣敤閾炬帴鎸囩ず絎xtern "C"澹版槑鐨勫嚱鏁幫紝榪欏氨鏄負浠涔堝湪閲嶈澆鍑芥暟闆嗗悎涓彧鏈変竴涓嚱鏁板彲浠ヨ澹版槑涓篹xtern "C"鐨勫師鍥狅紝鍏鋒湁涓嶅悓鐨勫弬鏁拌〃鐨勪袱涓猠xtern "C"鐨勫嚱鏁頒細琚摼鎺ョ紪杈戝櫒瑙嗕負鍚屼竴鍑芥暟銆備緥濡傦紝鍖呭惈浠ヤ笅涓や釜澹版槑鐨勭▼搴忔槸闈炴硶鐨勩?br />
浠g爜:
//error:涓涓噸杞藉嚱鏁伴泦涓湁涓や釜extern "C"鍑芥暟 extern "C" void print(const char*); extern "C" void print(int);

鍑芥暟妯℃澘
銆銆1銆佸畾涔夊嚱鏁版ā鏉匡細
浠g爜:
template <typename/class identifier, ...> [inline/extern] ReturnType FunctionName(FuncParameters...) { 銆銆//definition of a funciton template... }


浜曟硥 2006-06-29 15:11 鍙戣〃璇勮
]]>
鍒掑垎鍏ㄥ眬鍚嶅瓧絀洪棿http://m.shnenglu.com/zjj2816/archive/2006/06/29/9150.html浜曟硥浜曟硥Thu, 29 Jun 2006 07:09:00 GMThttp://m.shnenglu.com/zjj2816/archive/2006/06/29/9150.htmlhttp://m.shnenglu.com/zjj2816/comments/9150.htmlhttp://m.shnenglu.com/zjj2816/archive/2006/06/29/9150.html#Feedback0http://m.shnenglu.com/zjj2816/comments/commentRss/9150.htmlhttp://m.shnenglu.com/zjj2816/services/trackbacks/9150.html

鏉℃28: 鍒掑垎鍏ㄥ眬鍚嶅瓧絀洪棿

鍏ㄥ眬絀洪棿鏈澶х殑闂鍦ㄤ簬瀹冩湰韜粎鏈変竴涓傚湪澶х殑杞歡欏圭洰涓紝緇忓父浼氭湁涓嶅皯浜烘妸浠栦滑瀹氫箟鐨勫悕瀛楅兘鏀懼湪榪欎釜鍗曚竴鐨勭┖闂翠腑錛屼粠鑰屼笉鍙伩鍏嶅湴瀵艱嚧鍚嶅瓧鍐茬獊銆備緥濡傦紝鍋囪library1.h瀹氫箟浜嗕竴浜涘父閲忥紝鍏朵腑鍖呮嫭錛?/p>

const double lib_version = 1.204;

綾諱技鐨勶紝library2.h涔熷畾涔変簡錛?/p>

const int lib_version = 3;

寰堟樉鐒訛紝濡傛灉鏌愪釜紼嬪簭鎯沖悓鏃跺寘鍚玪ibrary1.h鍜宭ibrary2.h灝變細鏈夐棶棰樸傚浜庤繖綾婚棶棰橈紝浣犻櫎浜嗗槾閲岄獋鍑犲彞錛屾垨緇欎綔鑰呭彂鎶ュ鎬ч偖浠訛紝鎴栬嚜宸辯紪杈戝ご鏂囦歡鏉ユ秷闄ゅ悕瀛楀啿紿佸錛屼篃娌″叾瀹冧粈涔堝姙娉曘?/p>

浣嗘槸錛屼綔涓虹▼搴忓憳錛屼綘鍙互灝藉姏浣胯嚜宸卞啓鐨勭▼搴忓簱涓嶇粰鍒漢甯︽潵榪欎簺闂銆備緥濡傦紝鍙互棰勫厛鎯充竴浜涗笉澶у彲鑳介犳垚鍐茬獊鐨勬煇縐嶅墠緙錛屽姞鍦ㄦ瘡涓叏灞絎﹀彿鍓嶃傚綋鐒跺緱鎵胯錛岃繖鏍風粍鍚堣搗鏉ョ殑鏍囪瘑絎︾湅璧鋒潵涓嶆槸閭d箞浠や漢鑸掓湇銆?/p>

鍙︿竴涓瘮杈冨ソ鐨勬柟娉曟槸浣跨敤c++ namespace銆俷amespace鏈川涓婂拰浣跨敤鍓嶇紑鐨勬柟娉曚竴鏍鳳紝鍙笉榪囬伩鍏嶄簡鍒漢鎬繪槸鐪嬪埌鍓嶇紑鑰屽凡銆傛墍浠ワ紝涓嶈榪欎箞鍋氾細

const double sdmbook_version = 2.0;聽聽聽聽聽 // 鍦ㄨ繖涓▼搴忓簱涓?
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 姣忎釜絎﹀彿浠?sdm"寮澶?br />class sdmhandle { ... };聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

sdmhandle& sdmgethandle();聽聽聽聽聽聽聽聽聽聽聽聽 // 涓轟粈涔堝嚱鏁拌榪欐牱澹版槑錛?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍙傝鏉℃47

鑰岃榪欎箞鍋氾細

namespace sdm {
聽 const double book_version = 2.0;
聽 class handle { ... };
聽 handle& gethandle();
}

鐢ㄦ埛浜庢槸鍙互閫氳繃涓夌鏂規硶鏉ヨ闂繖涓鍚嶅瓧絀洪棿閲岀殑絎﹀彿錛氬皢鍚嶅瓧絀洪棿涓殑鎵鏈夌鍙峰叏閮ㄥ紩鍏ュ埌鏌愪竴鐢ㄦ埛絀洪棿錛涘皢閮ㄥ垎絎﹀彿寮曞叆鍒版煇涓鐢ㄦ埛絀洪棿錛涙垨閫氳繃淇グ絎︽樉寮忓湴涓嬈℃т嬌鐢ㄦ煇涓鍙鳳細

void f1()
{
聽 using namespace sdm;聽聽聽聽聽聽聽聽聽聽 // 浣垮緱sdm涓殑鎵鏈夌鍙蜂笉鐢ㄥ姞
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 淇グ絎﹀氨鍙互浣跨敤

聽 cout << book_version;聽聽聽聽聽聽聽聽聽 // 瑙i噴涓簊dm::book_version
聽 ...

聽 handle h = gethandle();聽聽聽聽聽聽聽 // handle瑙i噴涓簊dm::handle,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // gethandle瑙i噴涓簊dm::gethandle
聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

}

void f2()
{
聽 using sdm::book_version;聽聽聽聽聽聽聽 // 浣垮緱浠卋ook_version涓嶇敤鍔?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 淇グ絎﹀氨鍙互浣跨敤

聽 cout << book_version;聽聽聽聽聽聽聽聽聽聽 // 瑙i噴涓?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // sdm::book_version
聽 ...

聽 handle h = gethandle();聽聽聽聽聽聽聽聽 // 閿欒! handle鍜実ethandle
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 閮芥病鏈夊紩鍏ュ埌鏈┖闂?br />聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

}

void f3()
{
聽 cout << sdm::book_version;聽聽聽聽聽 // 浣垮緱book_version
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍦ㄦ湰璇彞鏈夋晥
聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

聽 double d = book_version;聽聽聽聽聽聽聽 // 閿欒! book_version
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 涓嶅湪鏈┖闂?/p>

聽 handle h = gethandle();聽聽聽聽聽聽聽聽 // 閿欒! handle鍜実ethandle
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 閮芥病鏈夊紩鍏ュ埌鏈┖闂?br />聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

}

錛堟湁浜涘悕瀛楃┖闂存病鏈夊悕瀛椼傝繖縐嶆病鍛藉悕鐨勫悕瀛楃┖闂翠竴鑸敤浜庨檺鍒跺悕瀛楃┖闂村唴閮ㄥ厓绱犵殑鍙鎬с傝瑙佹潯嬈緈31銆傦級

鍚嶅瓧絀洪棿甯︽潵鐨勬渶澶х殑濂藉涔嬩竴鍦ㄤ簬錛氭綔鍦ㄧ殑浜屼箟涓嶄細閫犳垚閿欒錛堝弬瑙佹潯嬈?6錛夈傛墍浠ワ紝浠庡涓笉鍚岀殑鍚嶅瓧絀洪棿寮曞叆鍚屼竴涓鍙峰悕涓嶄細閫犳垚鍐茬獊錛堝亣濡傜‘瀹炵湡鐨勪粠涓嶄嬌鐢ㄨ繖涓鍙風殑璇濓級銆備緥濡傦紝闄や簡鍚嶅瓧絀洪棿sdm澶栵紝鍋囧榪樿鐢ㄥ埌涓嬮潰榪欎釜鍚嶅瓧絀洪棿錛?/p>

namespace acmewindowsystem {

聽 ...

聽 typedef int handle;

聽 ...

}

鍙涓嶅紩鐢ㄧ鍙穐andle錛屼嬌鐢╯dm鍜宎cmewindowsystem鏃跺氨涓嶄細鏈夊啿紿併傚亣濡傜湡鐨勮寮曠敤錛屽彲浠ユ槑紜湴鎸囨槑鏄摢涓悕瀛楃┖闂寸殑handle錛?/p>

void f()
{
聽 using namespace sdm;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 寮曞叆sdm閲岀殑鎵鏈夌鍙?br />聽 using namespace acmewindowsystem;聽聽聽 // 寮曞叆acme閲岀殑鎵鏈夌鍙?/p>

聽 ...聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鑷敱鍦板紩鐢╯dm
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍜宎cme閲岄櫎handle涔嬪
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鐨勫叾瀹冪鍙?/p>

聽 handle h;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 閿欒! 鍝釜handle?

聽 sdm::handle h1;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 姝g‘, 娌℃湁浜屼箟

聽 acmewindowsystem::handle h2;聽聽聽聽聽聽聽聽 // 涔熸病鏈変簩涔?/p>

聽 ...

}

鍋囧鐢ㄥ父瑙勭殑鍩轟簬澶存枃浠剁殑鏂規硶鏉ュ仛錛屽彧鏄畝鍗曞湴鍖呭惈sdm.h鍜宎cme.h錛岃繖鏍風殑璇濓紝鐢變簬handle鏈夊涓畾涔夛紝緙栬瘧灝嗕笉鑳介氳繃銆?/p>

鍚嶅瓧絀洪棿鐨勬蹇靛姞鍏ュ埌c++鏍囧噯鐨勬椂闂寸浉瀵硅緝鏅氾紝鎵浠ユ湁浜涗漢浼氳涓哄畠涓嶅お閲嶈錛屽彲鏈夊彲鏃犮備絾榪欑鎯蟲硶鏄敊璇殑錛屽洜涓篶++鏍囧噯搴擄紙鍙傝鏉℃49錛夐噷鍑犱箮鎵鏈夌殑涓滆タ閮藉瓨鍦ㄤ簬鍚嶅瓧絀洪棿std涔嬩腑銆傝繖鍙兘浠や綘涓嶄互涓虹劧錛屼絾瀹冨嵈浠ヤ竴縐嶇洿鎺ョ殑鏂瑰紡褰卞搷鍒頒綘錛氳繖灝辨槸涓轟粈涔坈++鎻愪緵浜嗛偅浜涚湅璧鋒潵寰堟湁瓚g殑銆佹病鏈夋墿灞曞悕鐨勫ご鏂囦歡錛屽<iostream>, <string>絳夈傝緇嗕粙緇嶅弬瑙佹潯嬈?9銆?/p>

鐢變簬鍚嶅瓧絀洪棿鐨勬蹇靛紩鍏ョ殑鏃墮棿鐩稿杈冩櫄錛屾湁浜涚紪璇戝櫒鍙兘涓嶆敮鎸併傚氨綆楁槸榪欐牱錛岄偅涔熸病鐞嗙敱姹℃煋鍏ㄥ眬鍚嶅瓧絀洪棿錛屽洜涓哄彲浠ョ敤struct鏉ヨ繎浼煎疄鐜皀amespace銆傚彲浠ヨ繖鏍峰仛錛氬厛鍒涘緩涓涓粨鏋勭敤浠ヤ繚瀛樺叏灞絎﹀彿鍚嶏紝鐒跺悗灝嗚繖浜涘叏灞絎﹀彿鍚嶄綔涓洪潤鎬佹垚鍛樻斁鍏ョ粨鏋勪腑錛?/p>

// 鐢ㄤ簬妯℃嫙鍚嶅瓧絀洪棿鐨勪竴涓粨鏋勭殑瀹氫箟
struct sdm {
聽 static const double book_version;
聽 class handle { ... };
聽 static handle& gethandle();
};

const double sdm::book_version = 2.0;聽聽聽聽聽 // 闈欐佹垚鍛樼殑瀹氫箟

鐜板湪錛屽鏋滄湁浜烘兂璁塊棶榪欎簺鍏ㄥ眬絎﹀彿鍚嶏紝鍙敤綆鍗曞湴鍦ㄥ畠浠墠闈㈠姞涓婄粨鏋勫悕浣滀負鍓嶇紑錛?/p>

void f()
{
聽 cout << sdm::book_version;

聽 ...

聽 sdm::handle h = sdm::gethandle();

聽 ...
}

浣嗘槸錛屽鏋滃叏灞鑼冨洿鍐呭疄闄呬笂娌℃湁鍚嶅瓧鍐茬獊錛岀敤鎴峰氨浼氳寰楀姞淇グ絎﹂夯鐑﹁屽浣欍傚垢榪愮殑鏄紝榪樻槸鏈夊姙娉曟潵璁╃敤鎴烽夋嫨浣跨敤瀹冧滑鎴栧拷鐣ュ畠浠?/p>

瀵逛簬綾誨瀷鍚嶏紝鍙互鐢ㄧ被鍨嬪畾涔夛紙typedef錛夋潵鏄懼紡鍦板幓鎺夌┖闂村紩鐢ㄣ備緥濡傦紝鍋囪緇撴瀯s錛堟ā鎷熺殑鍚嶅瓧絀洪棿錛夊唴鏈変釜綾誨瀷鍚峵錛屽彲浠ヨ繖鏍風敤typedef鏉ヤ嬌寰梩鎴愪負s::t鐨勫悓涔夎瘝錛?/p>

typedef sdm::handle handle;

瀵逛簬緇撴瀯涓殑姣忎釜錛堥潤鎬侊級瀵硅薄x錛屽彲浠ユ彁渚涗竴涓紙鍏ㄥ眬錛夊紩鐢▁錛屽茍鍒濆鍖栦負s::x錛?/p>

const double& book_version = sdm::book_version;

鑰佸疄璇達紝濡傛灉璇諱簡鏉℃47錛屼綘灝變細涓嶅枩嬈㈠畾涔変竴涓薄book_version榪欐牱鐨勯潪灞閮ㄩ潤鎬佸璞°傦紙浣犲氨浼氱敤鏉℃47涓墍浠嬬粛鐨勫嚱鏁版潵鍙栦唬榪欐牱鐨勫璞★級

澶勭悊鍑芥暟鐨勬柟娉曞拰澶勭悊瀵硅薄涓鏍鳳紝浣嗚娉ㄦ剰錛屽嵆浣垮畾涔夊嚱鏁扮殑寮曠敤鏄悎娉曠殑錛屼絾浠g爜鐨勭淮鎶よ呬細鏇村枩嬈綘浣跨敤鍑芥暟鎸囬拡錛?/p>

sdm::handle& (* const gethandle)() =聽聽聽聽聽 // gethandle鏄寚鍚憇dm::gethandle
聽 sdm::gethandle;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鐨刢onst 鎸囬拡 (瑙佹潯嬈?1)

娉ㄦ剰gethandle鏄竴涓父鎸囬拡銆傚洜涓轟綘褰撶劧涓嶆兂璁╀綘鐨勭敤鎴峰皢瀹冩寚鍚戝埆鐨勪粈涔堜笢瑗匡紝鑰屼笉鏄痵dm::gethandle錛屽涓嶅錛?/p>

錛堝鏋滅湡鎯崇煡閬撴庝箞瀹氫箟涓涓嚱鏁扮殑寮曠敤錛岀湅鐪嬩笅闈細

sdm::handle& (&gethandle)() =聽聽聽聽聽 // gethandle鏄寚鍚?br />聽 sdm::gethandle;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // sdm::gethandle鐨勫紩鐢?/p>

鎴戜釜浜鴻涓鴻繖鏍風殑鍋氭硶涔熷緢濂斤紝浣嗕綘鍙兘浠ュ墠浠庢病瑙佸埌榪囥傞櫎浜嗗垵濮嬪寲鐨勬柟寮忓錛屽嚱鏁扮殑寮曠敤鍜屽嚱鏁扮殑甯告寚閽堝湪琛屼負涓婂畬鍏ㄧ浉鍚岋紝鍙槸鍑芥暟鎸囬拡鏇存槗浜庣悊瑙c傦級

鏈変簡涓婇潰鐨勭被鍨嬪畾涔夊拰寮曠敤錛岄偅浜涗笉浼氶伃閬囧叏灞鍚嶅瓧鍐茬獊鐨勭敤鎴峰氨浼氫嬌鐢ㄦ病鏈変慨楗扮鐨勭被鍨嬪拰瀵硅薄鍚嶏紱鐩稿弽錛岄偅浜涙湁鍏ㄥ眬鍚嶅瓧鍐茬獊鐨勭敤鎴峰氨浼氬拷鐣ョ被鍨嬪拰寮曠敤鐨勫畾涔夛紝浠d箣浠ュ甫淇グ絎︾殑絎﹀彿鍚嶃傝繕瑕佹敞鎰忕殑鏄紝涓嶆槸鎵鏈夌敤鎴烽兘鎯充嬌鐢ㄨ繖縐嶇畝鍐欏悕錛屾墍浠ヨ鎶婄被鍨嬪畾涔夊拰寮曠敤鏀懼湪涓涓崟鐙殑澶存枃浠朵腑錛屼笉瑕佹妸瀹冨拰錛堟ā鎷焠amespace鐨勶級緇撴瀯鐨勫畾涔夋販鍦ㄤ竴璧楓?/p>

struct鏄痭amespace鐨勫緢濂界殑榪戜技錛屼絾瀹為檯涓婅繕鏄浉宸緢榪溿傚畠鍦ㄥ緢澶氭柟闈㈠緢嬈犵己錛屽叾涓緢鏄庢樉鐨勪竴鐐規槸瀵硅繍綆楃鐨勫鐞嗐傚鏋滆繍綆楃琚畾涔変負緇撴瀯鐨勯潤鎬佹垚鍛橈紝瀹冨氨鍙兘閫氳繃鍑芥暟璋冪敤鏉ヤ嬌鐢紝鑰屼笉鑳借薄甯歌鐨勮繍綆楃鎵璁捐鐨勯偅鏍鳳紝鍙互閫氳繃鑷劧鐨勪腑緙璇硶鏉ヤ嬌鐢細

// 瀹氫箟涓涓ā鎷熷悕瀛楃┖闂寸殑緇撴瀯錛岀粨鏋勫唴閮ㄥ寘鍚玾idgets鐨勭被鍨?br />// 鍜屽嚱鏁般倃idgets瀵硅薄鏀寔operator+榪涜鍔犳硶榪愮畻
struct widgets {
聽 class widget { ... };


聽 // 鍙傝鏉℃21錛氫負浠涔堣繑鍥瀋onst
聽 static const widget operator+(const widget& lhs,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 const widget& rhs);

聽 ...

};

// 涓轟笂闈㈡墍榪扮殑widge鍜宱perator+
// 寤虹珛鍏ㄥ眬錛堟棤淇グ絎︾殑錛夊悕縐?/p>

typedef widgets::widget widget;


const widget (* const operator+)(const widget&,聽聽聽聽聽聽聽 // 閿欒!
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 const widget&);聽聽聽聽聽聽 // operator+涓嶈兘鏄寚閽堝悕

widget w1, w2, sum;

sum = w1 + w2;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 閿欒! 鏈┖闂存病鏈夊0鏄?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍙傛暟涓簑idgets 鐨刼perator+

sum = widgets::operator+(w1, w2);聽聽聽聽聽聽聽 // 鍚堟硶, 浣嗕笉鏄?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // "鑷劧"鐨勮娉?/p>

姝e洜涓鴻繖浜涢檺鍒訛紝鎵浠ヤ竴鏃︾紪璇戝櫒鏀寔錛屽氨瑕佸敖鏃╀嬌鐢ㄧ湡姝g殑鍚嶅瓧絀洪棿銆?/p>

浜曟硥 2006-06-29 15:09 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              9色精品在线| 欧美福利一区二区| 久久精品成人一区二区三区| 亚洲高清免费| 亚洲福利免费| 狠狠色狠色综合曰曰| 在线看成人片| 99亚洲一区二区| 9i看片成人免费高清| 亚洲视频大全| 一区二区欧美激情| 亚洲电影一级黄| 午夜精品福利视频| 欧美在线www| 亚洲免费观看高清完整版在线观看熊| 午夜在线精品| 国产精品视频导航| 亚洲欧美伊人| 亚洲精品日韩欧美| 国产一区二区三区高清在线观看 | 午夜精品福利在线观看| 久久久久久久999精品视频| 久久久在线视频| 亚洲视频一二三| 日韩亚洲在线观看| 久久青草欧美一区二区三区| 91久久嫩草影院一区二区| 久久精选视频| 亚洲欧美日本国产有色| 中文精品视频一区二区在线观看| 久久漫画官网| 久久一区视频| 国产精品久久中文| 在线综合欧美| 亚洲视频一区| 亚洲精品国产视频| 亚洲欧美影院| 亚洲欧美国产高清va在线播| 国产精品影院在线观看| 午夜在线精品| 欧美一区影院| 99精品热视频只有精品10| 国产精品蜜臀在线观看| 国内精品视频一区| 在线亚洲精品福利网址导航| 久久蜜桃香蕉精品一区二区三区| 美女日韩欧美| 亚洲欧美亚洲| 国产精品xxx在线观看www| 在线免费一区三区| 欧美一级艳片视频免费观看| 91久久极品少妇xxxxⅹ软件| 亚洲自拍16p| 欧美日韩亚洲精品内裤| 亚洲精品日韩综合观看成人91| 久久久久欧美精品| 欧美一区二区观看视频| 国产欧美精品va在线观看| 一区二区三区精品久久久| 亚洲国产成人精品女人久久久| 久久久久一区二区| 黄色成人av网站| 久久人人97超碰人人澡爱香蕉| 亚洲免费一区二区| 国产欧美精品久久| 欧美在线视频网站| 亚洲欧美在线一区| 国产一区二区三区高清在线观看| 欧美一区在线视频| 欧美一区二区免费视频| 国内免费精品永久在线视频| 麻豆成人小视频| 欧美大成色www永久网站婷| 亚洲狼人综合| 亚洲精品一区在线| 欧美色精品在线视频| 欧美一级网站| 久久久人成影片一区二区三区| 伊人久久久大香线蕉综合直播| 蜜臀av国产精品久久久久| 久久综合九色综合网站| 夜夜嗨av一区二区三区四区| 一片黄亚洲嫩模| 国产欧美日韩另类视频免费观看| 久久精品中文| 欧美99在线视频观看| 一区二区三区不卡视频在线观看 | 国产精品爽黄69| 欧美亚洲综合久久| 久久裸体视频| 国产精品99久久久久久有的能看| 亚洲欧美日韩成人| 亚洲第一福利视频| 亚洲色图自拍| 亚洲高清激情| 在线一区二区三区四区| 亚洲美女av黄| 国内精品久久久久久久97牛牛| 亚洲高清资源综合久久精品| 欧美日韩一区免费| 免费成人黄色片| 国产精品久久久一区二区| 农村妇女精品| 国产精一区二区三区| 亚洲国产精品久久久久婷婷老年| 国产精品狠色婷| 亚洲福利电影| 激情偷拍久久| 亚洲欧美资源在线| 亚洲天堂激情| 欧美成人精品不卡视频在线观看| 欧美在线黄色| 国产精品久久久久久久久久免费 | 欧美亚洲综合在线| 欧美大片在线观看| 美女主播精品视频一二三四| 国产精品美女一区二区| 亚洲黄色天堂| 亚洲福利国产精品| 久久久97精品| 久久久久久久综合色一本| 国产精品美女久久久久久久| 99国产精品视频免费观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲国内欧美| 久久久精品国产免费观看同学| 亚洲一区在线观看视频| 欧美欧美天天天天操| 亚洲韩国一区二区三区| 亚洲乱码国产乱码精品精98午夜| 久久久久久有精品国产| 久久免费国产精品1| 国产专区精品视频| 久久久不卡网国产精品一区| 久久蜜桃香蕉精品一区二区三区| 国产日韩欧美视频在线| 性高湖久久久久久久久| 久久免费的精品国产v∧| 精品福利免费观看| 久久天堂精品| 亚洲国产高清在线| 99视频有精品| 国产精品第一页第二页第三页| 99re在线精品| 午夜天堂精品久久久久| 国产伦精品一区二区三区免费| 亚洲女人天堂av| 久久久久久久久蜜桃| 尤物精品国产第一福利三区| 久久综合色88| 亚洲国产欧美一区| 亚洲特级片在线| 国产九九精品视频| 久久久99国产精品免费| 亚洲国产精品久久久久婷婷884| 夜夜夜久久久| 亚洲一区二区三区四区在线观看| 久久久久久久波多野高潮日日| 国产精品久久久久一区二区三区共 | 一区二区精品在线| 欧美午夜片在线观看| 亚洲影视在线播放| 老牛影视一区二区三区| 亚洲精品资源美女情侣酒店| 欧美日韩一区二区三区四区在线观看 | 久久久久www| 亚洲精品久久久久久久久久久久 | 亚洲欧美国产三级| 国产主播一区二区| 欧美成人免费小视频| 中国女人久久久| 美女999久久久精品视频| 一区二区三区不卡视频在线观看| 国产午夜精品久久| 欧美国产精品va在线观看| 一区二区三区四区蜜桃| 免费欧美高清视频| 亚洲欧美一区二区激情| 亚洲国产欧美不卡在线观看| 国产精品日日摸夜夜添夜夜av| 久久久久久91香蕉国产| 亚洲性视频h| 亚洲人成免费| 蜜桃av一区二区三区| 亚洲免费在线观看视频| 伊人久久亚洲影院| 国产精品影片在线观看| 欧美精品免费视频| 久久蜜臀精品av| 亚洲欧美变态国产另类| 亚洲国产午夜| 牛牛精品成人免费视频| 欧美在线播放视频| 亚洲淫性视频| 一区二区三区欧美在线| 亚洲国产精品第一区二区| 好男人免费精品视频| 国产精品稀缺呦系列在线| 欧美视频在线观看| 欧美日本中文字幕|