锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 1.1 DllMain綆浠?/p>
璺焑xe鏈変釜main鎴栬匴inMain鍏ュ彛鍑芥暟涓鏍鳳紝DLL涔熸湁涓涓叆鍙e嚱鏁幫紝灝辨槸DllMain銆備互“DllMain”涓哄叧閿瓧錛屾潵鐪嬬湅MSDN甯姪鏂囨。鎬庝箞浠嬬粛榪欎釜鍑芥暟鐨勩?/p>
The DllMain function is an optional method of entry into a dynamic-link library (DLL)銆傦紙綆瑕佺炕璇戯細(xì)瀵逛簬鍔ㄦ侀摼鎺ュ簱錛孌llMain鏄竴涓彲閫夌殑鍏ュ彛鍑芥暟銆傦級(jí)榪欏彞璇濆緢閲嶈錛屽緢澶氬垵瀛﹁呭彲鑳介兘璁や負(fù)涓涓姩鎬侀摼鎺ュ簱鑲畾瑕佹湁DllMain鍑芥暟銆傚叾瀹炰笉鐒?dòng)灱屽儚寰堝浠呬粎鍖呭惈璧勬簮淇℃伅鐨凞LL鏄病鏈塂llMain鍑芥暟鐨勩?/p>
1.2 浣曟椂璋冪敤DllMain 緋葷粺鏄湪浠涔堟椂鍊欒皟鐢―llMain鍑芥暟鐨勫憿錛熼潤(rùn)鎬侀摼鎺ユ椂錛屾垨鍔ㄦ侀摼鎺ユ椂璋冪敤LoadLibrary鍜孎reeLibrary閮戒細(xì)璋冪敤DllMain鍑芥暟銆侱llMain鐨勭涓変釜鍙傛暟fdwReason鎸囨槑浜?jiǎn)绯痪l熻皟鐢―ll鐨勫師鍥狅紝瀹冨彲鑳芥槸: DLL_PROCESS_ATTACH銆?/font> DLL_PROCESS_DETACH銆?/font> DLL_THREAD_ATTACH DLL_THREAD_DETACH銆?/font> 浠ヤ笅浠庤繖鍥涚鎯呭喌鏉ュ垎鏋愮郴緇熶綍鏃惰皟鐢ㄤ簡(jiǎn)DllMain銆?nbsp; 1.2.1 DLL_PROCESS_ATTACH 澶у閮界煡閬擄紝涓涓▼搴忚璋冪敤Dll閲岀殑鍑芥暟錛岄鍏堣鍏堟妸DLL鏂囦歡鏄犲皠鍒拌繘紼嬬殑鍦板潃絀洪棿銆傝鎶婁竴涓狣LL鏂囦歡鏄犲皠鍒拌繘紼嬬殑鍦板潃絀洪棿錛屾湁涓ょ鏂規(guī)硶錛氶潤(rùn)鎬侀摼鎺ュ拰鍔ㄦ侀摼鎺ョ殑LoadLibrary鎴栬匧oadLibraryEx銆?/p>
褰撲竴涓狣LL鏂囦歡琚槧灝勫埌榪涚▼鐨勫湴鍧絀洪棿鏃訛紝緋葷粺璋冪敤璇LL鐨凞llMain鍑芥暟錛屼紶閫掔殑fdwReason鍙傛暟涓篋LL_PROCESS_ATTACH銆傝繖縐嶈皟鐢ㄥ彧浼?xì)鍙戠敓鍦ńW竴嬈℃槧灝勬椂銆傚鏋滃悓涓涓繘紼嬪悗鏉ヤ負(fù)宸茬粡鏄犲皠榪涙潵鐨凞LL鍐嶆璋冪敤LoadLibrary鎴栬匧oadLibraryEx錛屾搷浣滅郴緇熷彧浼?xì)澧炲姞DLL鐨勪嬌鐢ㄦ鏁幫紝瀹冧笉浼?xì)鍐嶇敤DLL_PROCESS_ATTACH璋冪敤DLL鐨凞llMain鍑芥暟銆備笉鍚岃繘紼嬬敤LoadLibrary鍚屼竴涓狣LL鏃訛紝姣忎釜榪涚▼鐨勭涓嬈℃槧灝勯兘浼?xì)鐢―LL_PROCESS_ATTACH璋冪敤DLL鐨凞llMain鍑芥暟銆?/p>
鍙弬鑰僁llMainTest鐨凞LL_PROCESS_ATTACH_Test鍑芥暟銆?/p>
1.2.2 DLL_PROCESS_DETACH 褰揇LL琚粠榪涚▼鐨勫湴鍧絀洪棿瑙i櫎鏄犲皠鏃訛紝緋葷粺璋冪敤浜?jiǎn)瀹冪殑DllMain錛屼紶閫掔殑fdwReason鍊兼槸DLL_PROCESS_DETACH銆傚綋DLL澶勭悊璇ュ兼椂錛屽畠搴旇鎵ц榪涚▼鐩稿叧鐨勬竻鐞嗗伐浣溿?/p>
閭d箞浠涔堟椂鍊橠LL琚粠榪涚▼鐨勫湴鍧絀洪棿瑙i櫎鏄犲皠鍛紵涓ょ鎯呭喌錛?/p>
鈼咶reeLibrary瑙i櫎DLL鏄犲皠錛?font color=#ff0000>鏈夊嚑涓狶oadLibrary錛屽氨瑕佹湁鍑犱釜FreeLibrary錛?/p>
鈼嗚繘紼嬬粨鏉熻岃В闄LL鏄犲皠錛屽湪榪涚▼緇撴潫鍓嶈繕娌℃湁瑙i櫎DLL鐨勬槧灝勶紝榪涚▼緇撴潫鍚庝細(xì)瑙i櫎DLL鏄犲皠銆傦紙濡傛灉榪涚▼鐨勭粓緇撴槸鍥犱負(fù)璋冪敤浜?jiǎn)TerminateProcess錛岀郴緇熷氨涓嶄細(xì)鐢―LL_PROCESS_DETACH鏉ヨ皟鐢―LL鐨凞llMain鍑芥暟銆傝繖灝辨剰鍛崇潃DLL鍦ㄨ繘紼嬬粨鏉熷墠娌℃湁鏈轟細(xì)鎵ц浠諱綍娓呯悊宸ヤ綔銆傦級(jí) 娉ㄦ剰錛氬綋鐢―LL_PROCESS_ATTACH璋冪敤DLL鐨凞llMain鍑芥暟鏃訛紝濡傛灉榪斿洖FALSE錛岃鏄庢病鏈夊垵濮嬪寲鎴愬姛錛岀郴緇熶粛浼?xì)鐢―LL_PROCESS_DETACH璋冪敤DLL鐨凞llMain鍑芥暟銆傚洜姝わ紝蹇呴』紜繚娓呯悊閭d簺娌℃湁鎴愬姛鍒濆鍖栫殑涓滆タ銆?/font> 鍙弬鑰僁llMainTest鐨凞LL_PROCESS_DETACH_Test鍑芥暟銆?/p>
1.2.3 DLL_THREAD_ATTACH 褰撹繘紼嬪垱寤轟竴綰跨▼鏃訛紝緋葷粺鏌ョ湅褰撳墠鏄犲皠鍒拌繘紼嬪湴鍧絀洪棿涓殑鎵鏈塂LL鏂囦歡鏄犲儚錛屽茍鐢ㄥ糄LL_THREAD_ATTACH璋冪敤DLL鐨凞llMain鍑芥暟銆?/p>
鏂板垱寤虹殑綰跨▼璐熻矗鎵ц榪欐鐨凞LL鐨凞llMain鍑芥暟錛屽彧鏈夊綋鎵鏈夌殑DLL閮藉鐞嗗畬榪欎竴閫氱煡鍚庯紝緋葷粺鎵嶅厑璁歌繘紼嬪紑濮嬫墽琛屽畠鐨勭嚎紼嬪嚱鏁般?/p>
娉ㄦ剰璺烡LL_PROCESS_ATTACH鐨勫尯鍒紝鎴戜滑鍦ㄥ墠闈㈣榪囷紝絎琻(n>=2)嬈′互鍚庡湴鎶奃LL鏄犲儚鏂囦歡鏄犲皠鍒拌繘紼嬬殑鍦板潃絀洪棿鏃訛紝鏄笉鍐嶇敤DLL_PROCESS_ATTACH璋冪敤DllMain鐨勩傝孌LL_THREAD_ATTACH涓嶅悓錛岃繘紼嬩腑鐨勬瘡嬈″緩绔嬬嚎紼嬶紝閮戒細(xì)鐢ㄥ糄LL_THREAD_ATTACH璋冪敤DllMain鍑芥暟錛屽摢鎬曟槸綰跨▼涓緩绔嬬嚎紼嬩篃涓鏍楓?/p>
1.2.4 DLL_THREAD_DETACH 濡傛灉綰跨▼璋冪敤浜?jiǎn)ExitThread鏉ョ粨鏉熺嚎紼嬶紙綰跨▼鍑芥暟榪斿洖鏃訛紝緋葷粺涔熶細(xì)鑷姩璋冪敤ExitThread錛夛紝緋葷粺鏌ョ湅褰撳墠鏄犲皠鍒拌繘紼嬬┖闂翠腑鐨勬墍鏈塂LL鏂囦歡鏄犲儚錛屽茍鐢―LL_THREAD_DETACH鏉ヨ皟鐢―llMain鍑芥暟錛岄氱煡鎵鏈夌殑DLL鍘繪墽琛岀嚎紼嬬駭鐨勬竻鐞嗗伐浣溿?/p>
娉ㄦ剰錛氬鏋滅嚎紼嬬殑緇撴潫鏄洜涓虹郴緇熶腑鐨勪竴涓嚎紼嬭皟鐢ㄤ簡(jiǎn)TerminateThread錛岀郴緇熷氨涓嶄細(xì)鐢ㄥ糄LL_THREAD_DETACH鏉ヨ皟鐢ㄦ墍鏈塂LL鐨凞llMain鍑芥暟銆?/p>
1.3 涓篋llMain鎹㈠悕 鍦ㄦ棭鏈熺殑SDK鐗堟湰涓紝DllMain鏄彨鍋欴llEntryPoint銆傚叾瀹炴湁涓浠墮矞涓轟漢鐭ョ殑浜嬶細(xì)涓涓狣ll鐨勫叆鍙e嚱鏁板悕鏄彲浠ヨ嚜宸卞畾涔夌殑銆備笅闈㈡垜灝嗕互VC++6.0涓轟緥鏉ユ紨紺哄浣曟洿鏀廣傞鍏堣璇存槑涓鐐癸紝铏界劧DllMain鍙互鎹㈡垚鍏朵粬鍑芥暟鍚嶏紝浣嗗嚱鏁扮殑鍙傛暟鍜岃繑鍥炲煎繀欏誨拰DllMain涓鏍楓傝屼笖榪欎釜鍑芥暟瑕佷負(fù)__stdcall綾誨瀷錛圖llMain鏈韓涔熸槸__stdcall綾誨瀷錛夈?/p>
鎵撳紑VC++鑿滃崟Project\Settings\Link tab\ Output in the Category box錛屽涓嬪浘錛屽湪Entry-point symbol涓緭鍏ヨ鏇挎崲DllMain鐨勫嚱鏁板悕錛堝綋鐒惰繖涓嚱鏁板悕鏄綘紼嬪簭涓凡緇忓疄鐜扮殑鍑芥暟錛夈侲ntry-point symbol鏄共涔堢殑鍛紵鍙互浠ュ叧閿瓧“Entry-point symbol”鎼滅儲(chǔ)MSDN甯姪鏂囨。鏌ョ湅錛屾悳绱㈡椂錛屾墦閽?#8220;浠呮悳绱㈡爣棰?#8221;浼?xì)鏇村揩瀹氫綅銆?/p>
鎸塐K鍚庯紝濡傛灉椹笂緙栬瘧鐨勮瘽浼?xì)鍑虹幇濡備笅閿欒锛?xì) LIBCMTD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/Dll.dll : fatal error LNK1120: 1 unresolved externals 鎵撳紑VC++鑿滃崟Project\Settings\C/C++閫夐」鍗★紝濡備笅鍥撅紝鍦≒roject Options錛氭湯灝劇殑鍦版柟娣誨姞”/D”錛堝浘涓摑鑹查珮浜殑鍦版柟錛夛紝瑕佹敞鎰忎綅緗紝鎴戣瘯浜?jiǎn)锛岃鎶?D鏀懼埌/GZ鍚庨潰涔熶細(xì)閾炬帴閿欒錛屾垜涔熶笉鎳備負(fù)浠涔堬紝^_^銆傛寜OK錛屽啀嬈$紪璇戯紝鎴愬姛銆傚ぇ瀹跺彲浠ヨ嚜宸辨祴璇曚笅鍒板簳鏈夋病鏈夋洿鏀規(guī)垚鍔燂紝浠涔堬紝濡傛灉嫻嬭瘯錛熸墦鍑?guó)櫚冨紡淇℃伅鍟娿?/p>
1.4 DisableThreadLibraryCalls 鐪嬪府鍔╁氨鐭ラ亾瀹冩槸騫蹭箞鐢ㄧ殑錛?/p>
The DisableThreadLibraryCalls function disables the DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications for the dynamic-link library (DLL) specified by hLibModule. This can reduce the size of the working co 鐢╩ingw32-make鍓嶄慨鏀逛竴涓媘akefile鏂囦歡,鏀逛負(fù)濡備笅錛?/p>
# DEBUG can be set to YES to include debugging info, or NO otherwise(涓嶆槸DEBUG) # PROFILE can be set to YES to include profiling info, or NO otherwise # TINYXML_USE_STL can be used to turn on STL support. NO, then STL 涓銆乀inyXml鐨勭壒鐐? TinyXml鏄竴涓熀浜嶥OM妯″瀷鐨勩侀潪楠岃瘉鐨勮交閲忕駭C++瑙i噴鍣ㄣ?/p>
1.SAX鍜孌OM 鐩墠XML鐨勮В鏋愪富瑕佹湁涓ゅぇ妯″瀷錛歋AX鍜孌OM銆?/p>
鍏朵腑SAX鏄熀浜庝簨浠剁殑錛屽叾鍩烘湰宸ヤ綔嫻佺▼鏄垎鏋怷ML鏂囨。錛屽綋鍙戠幇浜?jiǎn)涓涓柊鐨勫厓绱犳椂錛屼駭鐢熶竴涓搴斾簨浠訛紝騫惰皟鐢ㄧ浉搴旂殑鐢ㄦ埛澶勭悊鍑芥暟銆傝繖縐嶆柟寮忓崰鐢ㄥ唴瀛樺皯錛岄熷害蹇紝浣嗙敤鎴風(fēng)▼搴忕浉搴斿緱浼?xì)姣旇緝澶嶆潅銆?/p>
鑰孌OM錛堟枃妗e璞℃ā鍨嬶級(jí)錛屽垯鏄湪鍒嗘瀽鏃訛紝涓嬈℃х殑灝嗘暣涓猉ML鏂囨。榪涜鍒嗘瀽錛屽茍鍦ㄥ唴瀛樹腑褰㈡垚瀵瑰簲鐨勬爲(wèi)緇撴瀯錛屽悓鏃訛紝鍚戠敤鎴鋒彁渚涗竴緋誨垪鐨勬帴鍙f潵璁塊棶鍜岀紪杈戣鏍?wèi)缁撴瀯銆傝繖縐嶆柟寮忓崰鐢ㄥ唴瀛樺ぇ錛岄熷害寰寰鎱簬SAX錛屼絾鍙互緇欑敤鎴鋒彁渚涗竴涓潰鍚戝璞$殑璁塊棶鎺ュ彛錛屽鐢ㄦ埛鏇翠負(fù)鍙嬪ソ銆?/p>
瀵逛簬涓涓壒瀹氱殑XML鏂囨。鑰岃█錛屽叾姝g‘鎬у垎涓轟袱涓眰嬈°傞鍏堟槸鍏舵牸寮忓簲璇ョ鍚圶ML鐨勫熀鏈牸寮忚姹傦紝姣斿絎竴琛岃鏈夊0鏄庯紝鏍囩鐨勫祵濂楀眰嬈″繀欏誨墠鍚庝竴鑷寸瓑絳夛紝絎﹀悎榪欎簺瑕佹眰鐨勬枃浠訛紝灝辨槸涓涓悎鏍肩殑XML鏂囦歡錛岀О浣渨ell-formatted銆備絾闄ゆ涔嬪錛屼竴涓猉ML鏂囨。鍥犲叾鍐呭鐨勪笉鍚岃繕蹇呴』鍦ㄨ涔変笂絎﹀悎鐩稿簲鐨勬爣鍑嗭紝榪欎簺鏍囧噯鐢辯浉搴旂殑DTD鏂囦歡鎴栬匰chema鏂囦歡鏉ュ畾涔夛紝絎﹀悎浜?jiǎn)杩欎簺瀹氫箟瑕佹眰鐨刋ML鏂囦歡錛岀О浣渧alid銆?/p>
鍥犳錛岃В鏋愬櫒涔熷垎涓轟袱縐嶏紝涓縐嶆槸楠岃瘉鐨勶紝鍗充細(xì)璺熸嵁XML鏂囦歡涓殑澹版槑錛岀敤鐩稿簲鐨凞TD鏂囦歡瀵筙ML鏂囦歡榪涜鏍¢獙錛屾鏌ュ畠鏄惁婊¤凍DTD鏂囦歡鐨勮姹傘傚彟涓縐嶆槸蹇界暐DTD鏂囦歡錛屽彧瑕佸熀鏈牸寮忔紜紝灝卞彲浠ヨ繘琛岃В鏋愩?/p>
灝辨垜鎵鐭ワ紝楠岃瘉鐨勮В鏋愬櫒閫氬父閮芥槸姣旇緝閲嶉噺綰х殑銆俆inyXml涓嶆敮鎸侀獙璇侊紝浣嗘槸浣撶Н寰堝皬錛岀敤鍦ㄨВ鏋愭牸寮忚緝涓虹畝鍗曠殑XML鏂囦歡錛屾瘮濡傞厤緗枃浠舵椂錛岀壒鍒殑鍚堥傘?/p>
TinyXml棣栭〉鍦?a >http://www.grinninglizard.com/tinyxml/index.html錛屼粠榪欓噷鍙互鎵懼埌鏈鏂扮増鏈殑婧愪唬鐮侊紝鐩墠鐨勭増鏈槸 2.4.3 (鎴嚦2006.5.17). 2.鏋勫緩 TinyXml鍦ㄦ瀯寤烘椂鍙互閫夋嫨鏄惁鏀寔STL錛岄夋嫨鐨勮瘽錛屽垯鍙互浣跨敤std::string錛屾墍浠ラ氬父搴斿湪Windows涓婏紝TinyXml鐨勬簮鐮佸寘閲屾彁渚涗簡(jiǎn)VC6鐨勫伐紼嬫枃浠訛紝鐩存帴鐢ㄥ畠?yōu)鍙互鐢熸垚涓や釜闈?rùn)璇ユ墦寮榪欎釜閫夐」銆傛佸簱錛堝甫STL鍜屼笉甯TL錛夛紝闈炲父瀹規(guī)槗銆傚敮涓闇瑕佹敞鎰忕殑鏄紝榛樿鐢熸垚鐨勫簱鏄崟綰跨▼鐨勶紝濡傛灉鐢ㄥ湪澶氱嚎紼嬬殑欏圭洰涓紝闇瑕佹敼鍔ㄤ竴涓嬮厤緗紝鐢熸垚鐩稿簲鐨勫綰跨▼搴撱?/p>
鍦║nix騫沖彴涓婏紝TinyXml鐨勬簮鐮佸寘閲屽彧鎻愪緵浜?jiǎn)涓涓狹akefile錛屽浜庡吀鍨嬬殑Linux緋葷粺錛屾垨瑁呬簡(jiǎn)gcc鍜実make鐨勫叾浠朥nix錛岃繖涓狹akefile瓚沖鐢ㄤ簡(jiǎn)錛屾垜鍦≧H9鍜孯HEL4涓婃祴璇曪紝綆鍗曠殑make灝辨垚鍔熶簡(jiǎn)銆傞渶瑕佹敞鎰忕殑鏈変互涓嬪嚑鐐癸細(xì)榛樿鐨勭紪璇戞槸涓嶆敮鎸丼TL鐨勶紝鍙互閫氳繃緙栬緫Makefile鐨凾INYXML_USE_STL := NO閭d竴琛岋紝鎶奛O鏀規(guī)垚YES灝卞彲浠ユ敮鎸丼TL浜?jiǎn)锛洏q樻湁榛樿鍙敓鎴愪簡(jiǎn)涓涓祴璇曠▼搴忥紝娌℃湁鐢熸垚浠諱綍搴擄紝濡傛灉瑕佺敓鎴愰潤(rùn)鎬佸簱鐨勮瘽錛屽彲浠ョ敤ar鍛戒護(hù)錛屽皢鐢熸垚鐨勫嚑涓洰鏍囨枃浠舵墦鍖呭氨琛屼簡(jiǎn)錛屽鏋滆鐢熸垚鍔ㄦ佸簱錛屽垯闇瑕佸姞涓?fpic鍙傛暟閲嶆柊緙栬瘧銆?/p>
3.浣跨敤 鏋勫緩浜?jiǎn)鐩稿簲鐨勫簱涔嬪悗锛屽湪鋴社敤浜?jiǎn)瀹冧滑鐨勫伐紼嬩腑錛屽彧瑕佸湪榪炴帴鏃舵妸浠栦滑榪炰笂灝辮浜?jiǎn)銆傞渶瑕佹敞鎰忕殑鏄紝濡傛灉闇瑕丼TL鏀寔錛屽湪緙栬瘧鐢ㄥ埌浜?jiǎn)TinyXml鐨勬枃浠舵椂錛岄渶瑕佸畾涔変竴涓畯TIXML_USE_STL錛屽gcc錛屽彲浠ヤ嬌鐢ㄥ弬鏁?DTIXML_USE_STL錛屽cl.exe錛圴C錛夛紝鍙互浣跨敤鍙傛暟/DTIXML_USE_STL錛屽鏋滃珜楹葷儲(chǔ)錛屽彲浠ョ洿鎺ュ畾涔夊湪 tinyxml.h鏂囦歡閲屻?/p>
1.綾諱箣闂寸殑鍏崇郴 TinyXml瀹炵幇鐨勬椂DOM璁塊棶妯″瀷錛屽洜姝ゆ彁渚涗簡(jiǎn)涓緋誨垪鐨勭被瀵瑰簲XML鏂囦歡涓殑鍚勪釜鑺傜偣銆備富瑕佺被闂寸殑鍏崇郴濡備笅鍥炬墍紺猴細(xì) TiXmlBase錛氬叾瀹冪被鐨勫熀綾伙紝鏄釜鎶借薄綾?/p>
TiXmlNode錛氳〃紺轟竴涓妭鐐癸紝鍖呭惈鑺傜偣鐨勪竴鑸柟娉曪紝濡傝闂嚜鑺傜偣銆佸厔寮熻妭鐐廣佺紪杈戣嚜韜佺紪杈戝瓙鑺傜偣 TiXmlDocument錛氳〃紺烘暣涓猉ML鏂囨。錛屼笉瀵瑰簲鍏朵腑鏌愪釜鐗瑰畾鐨勮妭鐐廣?/p>
TiXmlElement錛氳〃紺哄厓绱犺妭鐐癸紝鍙互鍖呭惈瀛愯妭鐐瑰拰TiXmlAttribute TiXmlComment錛氳〃紺烘敞閲?/p>
TiXmlDeclaration錛氳〃紺哄0鏄?/p>
TiXmlText錛氳〃紺烘枃鏈妭鐐?/p>
TiXmlUnknown錛氳〃紺烘湭鐭ヨ妭鐐癸紝閫氬父鏄嚭閿欎簡(jiǎn) TiXmlAttribute錛氳〃紺轟竴涓厓绱犵殑灞炴?/p>
涓嬮潰鏄竴涓畝鍗曠殑渚嬪瓙錛?/p>
<?xml version="1.0" encoding="utf-8" ?> book,name,price, description錛岄兘瀵瑰簲TiXmlElement 絎竴琛屽搴斾竴涓猅iXmlDeclaration 絎簩琛屽搴斾竴涓猅iXmlComment “TinyXml How To”瀵瑰簲涓涓猅iXmlText unit鍒欐槸price鐨勪竴涓猅iXmlAttribute 榪欎簺綾諱笌XML鏂囦歡涓殑鐩稿簲鍏冪礌閮芥湁寰堝ソ鐨勫搴斿叧緋伙紝鍥犳鐩鎬俊鍙傜収TinyXml鐨勬枃妗o紝鍙互寰堝鏄撶殑鎺屾彙鍚勪釜鏂規(guī)硶鐨勪嬌鐢ㄣ?/p>
鍚勭被涔嬮棿鐨勮漿鎹? TinyXml鏈澶х殑鐗圭偣灝辨槸瀹冨緢灝忥紝鍙互寰堟柟渚跨殑闈?rùn)鎬佽繛鎺ュ埌紼嬪簭閲屻傚浜庡儚閰嶇疆鏂囦歡銆佺畝鍗曠殑鏁版嵁鏂囦歡榪欑被鏂囦歡鐨勮В鏋愶紝瀹冨緢閫傚悎銆備絾鏄敱浜庡畠鏄潪楠岃瘉鐨勶紝鍥犳闇瑕佸湪紼嬪簭閲屽仛璁稿媯(gè)鏌ュ伐鍋氾紝鍔犻噸浜?jiǎn)绋嬪簭缂栧啓鐨勮礋鎷呫傚洜姝ゅ浜庡鏉傜殑XML鏂囦歡錛屾垜瑙夊緱鏈濂借繕鏄敤楠岃瘉鐨勮В鏋愬櫒鏉ュ鐞嗐?br>
]]>
2 #include <string>
3
4 using namespace std ;
5
14
15 std::string ws2s(const std::wstring& ws)
16 {
17 std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
18 setlocale(LC_ALL, "chs");
19 const wchar_t* _Source = ws.c_str();
20 size_t _Dsize = 2 * ws.size() + 1;
21 char *_Dest = new char[_Dsize];
22 memset(_Dest,0,_Dsize);
23 wcstombs(_Dest,_Source,_Dsize);
24 std::string result = _Dest;
25 delete []_Dest;
26 setlocale(LC_ALL, curLocale.c_str());
27 return result;
28 }
29
30 std::wstring s2ws(const std::string& s)
31 {
32 setlocale(LC_ALL, "chs");
33 const char* _Source = s.c_str();
34 size_t _Dsize = s.size() + 1;
35 wchar_t *_Dest = new wchar_t[_Dsize];
36 wmemset(_Dest, 0, _Dsize);
37 mbstowcs(_Dest,_Source,_Dsize);
38 std::wstring result = _Dest;
39 delete []_Dest;
40 setlocale(LC_ALL, "C");
41 return result;
42 }
43
44 int main()
45 {
46 freopen( "data.in", "r", stdin ) ;
47 freopen( "data.out", "w", stdout ) ;
48
49 //wcout.imbue( locale("chs") ) ;
50 string line ;
51 wstring wline ;
52 wstring oline ;
53 VEC vec ;
54
55 cout << sizeof( char ) << endl ;
56 cout << sizeof( wchar_t ) << endl ;
57
58 while( cin >> line )
59 {
60 //cout << line << endl ;
61
62 wline = s2ws( line ) ;
63
64 cout << ws2s( wline ) << endl ;
65
66 for( int i=0; i<wline.length(); i++ )
67 {
68 oline += wline[i] ;
69 oline += (wchar_t)('/') ;
70 }
71
72 cout << ws2s( oline ) << endl ;
73 }
74
75 return 0 ;
76 }
]]>
Homepage: http://www.grinninglizard.com/tinyxml/
download錛?a >http://sourceforge.net/projects/tinyxml
DEBUG := NO
PROFILE := NO
# will not be used. YES will include the STL files.(浣跨敤STL,閫夋嫨鐨勮瘽錛屽垯鍙互浣跨敤std::string)
TINYXML_USE_STL := YES
2.楠岃瘉鍜岄潪楠岃瘉
浜屻乀inyXml鐨勬瀯寤哄拰浣跨敤
1.鑾峰彇
涔熷彲浠ユ妸闇瑕佺殑婧愭枃浠跺姞鍏ュ埌鎴戜滑鐨刾roject涓紝鍚戜嬌鐢ㄨ嚜宸辯殑鏂囦歡涓鏍風(fēng)殑璋冪敤錛屼竴鑸負(fù)浜?jiǎn)鏇村姞鏂逛究鋴社敤锛屽彲浠ュ搴撴犚?guī)嵁鎴戜滑瀹為檯鐨勬暟鎹粨鏋勮繘琛屽啀鍒嗚銆?/p>
涓夈乀inyXml鐨勭紪紼嬫ā鍨?/p>
<!-This is only a sample-->
<book>
<name>TinyXml How To</name>
<price unit=”RMB”>20</price>
<description>Some words…</description>
</ book >
鏁翠釜鏂囨。錛屽搴擳iXmlDocument
2.闇瑕佹敞鎰忕殑闂
鐢變簬鍚勪釜鑺傜偣綾婚兘浠嶵iXmlNode緇ф壙錛屽湪浣跨敤鏃跺父甯擱渶瑕佸皢TiXmlNode*綾誨瀷鐨勬寚閽堣漿鎹負(fù)鍏舵淳鐢熺被鐨勬寚閽堬紝鍦ㄨ繘琛岃繖縐嶈漿鎹㈡椂錛屽簲璇ラ鍏堜嬌鐢ㄧ敱TiXmlNode綾繪彁渚涚殑涓緋誨垪杞崲鍑芥暟錛屽ToElement(void)錛岃屼笉鏄痗++鐨刣ynamic_cast
媯(gè)鏌ヨ繑鍥炲?
鐢變簬TinyXml鏄竴涓潪鏍¢獙鐨勮В鏋愬櫒錛屽洜姝ゅ綋瑙f瀽涓涓枃浠舵椂錛屽緢鍙兘鏂囦歡騫朵笉鍖呭惈鎴戜滑棰勬湡鐨勬煇涓妭鐐癸紝鍦ㄨ繖縐嶆儏鍐典笅錛孴inyXml灝嗚繑鍥炵┖鎸囬拡銆傚洜姝わ紝蹇呴』瑕佸榪斿洖鍊艱繘琛屾鏌ワ紝鍚﹀垯灝嗗緢瀹規(guī)槗鍑虹幇鍐呭瓨璁塊棶鐨勯敊璇?/p>
濡備綍閲嶅ご寤虹珛涓涓猉ML鏂囦歡
鍏堝緩绔嬩竴涓猅iXmlDocument瀵硅薄錛岀劧鍚庯紝杞藉叆鏌愪釜妯℃澘錛屾垨鑰呯洿鎺ユ彃鍏ヤ竴涓妭鐐逛綔涓烘牴鑺傜偣錛屾帴鐫灝卞彲浠ュ儚鎵撳紑涓涓凡鏈夌殑XML鏂囦歡閭f牱瀵瑰畠榪涜鎿嶄綔浜?jiǎn)銆?/p>
鍥涖佹葷粨
]]>
2
3 #include <iostream>
4 #include <string>
5 #include <direct.h>//getcwd(); chdir();
6 #include <windows.h>//GetModuleFileNameA();
7 #include <io.h>
8 #include <vector>
9 #include <algorithm>
10
11 using namespace std ;
12
13 const int size = 100 ;
14
15 bool cmp( const string& a, const string& b )
16 {
17 if( a.length() != b.length() )
18 return a.length() < b.length() ;
19 else
20 return strcmp( a.c_str(), b.c_str() ) < 0 ;
21 }
22
23 int main()
24 {
25 string filePath ;//瀹氫箟鏂囦歡璺緞
26 string fileName ;//瀹氫箟鏂囦歡鍚嶅瓧
27 char tPath[size] ;//涓存椂鍙橀噺
28
29 ////鑾峰彇褰撳墠鎵ц鏂囦歡璺緞
30 ::GetModuleFileNameA( NULL, tPath, size ) ;//鑾峰彇褰撳墠鎵ц鏂囦歡璺緞
31
32 filePath = tPath ;
33 cout << "filePath = " << filePath << endl ;
34
35 //鑾峰彇褰撳墠宸ヤ綔鐩綍 -- getcwd()
36 if( NULL == getcwd( tPath, size ) )
37 perror( "getcwd error !\n" ) ;
38 else
39 cout << tPath << endl ;
40 filePath = tPath ;
41
42 //鏇存敼褰撳墠宸ヤ綔鐩綍 -- 鐩稿璺緞鏂瑰紡 -- chdir()
43 if( chdir( "../HLOJ" ) )
44 cout << "Unable to locate the directory you specified !" << endl ;
45 else
46 {
47 getcwd( tPath, size ) ;//閲嶆柊鑾峰彇褰撳墠宸ヤ綔鐩綍
48 cout << "The CWD is " << tPath << endl ;//杈撳嚭褰撳墠宸ヤ綔鐩綍
49 system( "type HLOJ_1130.cpp" ) ;//system鎵цDOS鎸囦護(hù)
50 }
51
52 //鏇存敼褰撳墠宸ヤ綔鐩綍 -- 緇濆璺緞鏂瑰紡 -- chdir()
53 if( chdir( "D:\\wang" ) )
54 cout << "Unable to locate the directory you specified !" << endl ;
55 else
56 {
57 getcwd( tPath, size ) ;//閲嶆柊鑾峰彇褰撳墠宸ヤ綔鐩綍
58 cout << tPath << endl ;
59 system( "dir *.bat" ) ;//dir D:/wang
60 }
61
62 //鏌ユ壘褰撳墠鐩綍涓鍚堣姹傜殑鏂囦歡錛屽茍涓旇緭鍑烘枃浠剁殑鐩稿叧淇℃伅 -- IO.h
63 int hFile ;
64 _finddata_t fileInfo ;
65
66 vector<string> vec ;//鐢ㄤ簬淇濆瓨鏂囦歡鍚嶅瓧 -- 鍙帓搴忕敤
67
68 vec.clear() ;
69 if( (hFile = _findfirst( "*.txt", &fileInfo )) != EOF )
70 {
71 do
72 {
73 if( !(fileInfo.attrib & _A_SUBDIR ) )//媯(gè)鏌ユ槸鍚︽槸鐩綍
74 {
75 cout << fileInfo.name << ", " << fileInfo.size << "Bytes" << endl ;
76 vec.push_back( fileInfo.name ) ;
77 }
78 }while( 0 == _findnext( hFile, &fileInfo ) ) ;
79
80 _findclose( hFile ) ;
81 }
82
83 sort( vec.begin(), vec.end(), cmp ) ;//瀵規(guī)枃浠朵粠灝忓埌澶ф帓搴?/span>
84 for( vector<string>::iterator it=vec.begin(); it!=vec.end(); it++ )
85 {
86 cout << *it << endl ;
87 }
88 cout << "*****************************************************" << endl ;
89
90 //鏌ユ壘褰撳墠鐩綍涓鍚堣姹傜殑鏂囦歡錛屽茍涓旇緭鍑烘枃浠剁殑鐩稿叧淇℃伅 -- 搴曞眰
91
92 _getcwd( tPath, size ) ;
93 cout << tPath << endl ;
94
95 WIN32_FIND_DATAA findData ;//瀹氫箟鏂囦歡緇撴瀯鍙橀噺
96 ::ZeroMemory( &findData, sizeof(findData) ) ;
97
98 int fileCnt = 0 ;
99 HANDLE hFind = ::FindFirstFileA( "*.txt", &findData ) ;
100 //if( hFind != INVALID_HANDLE_VALUE )//澶辮觸榪斿洖INVALID_HANDLE_VALUE
101 if( hFind != (HANDLE)EOF )
102 {
103 do
104 {
105 if( '.' == findData.cFileName[0] ) continue ;
106
107 long long fileSize = (long long)(findData.nFileSizeHigh<<32)
108 + findData.nFileSizeLow ;
109 cout << ++fileCnt << "\\" << findData.cFileName << "***" << fileSize << endl ;
110 }while( FindNextFileA( hFind, &findData ) ) ;
111
112 FindClose( hFind ) ;
113 }
114
115 return 0 ;
116 }
]]>