锘??xml version="1.0" encoding="utf-8" standalone="yes"?>玖玖国产精品视频,在线性视频日韩欧美,国产精品视频在线观看http://m.shnenglu.com/RancyGe/zh-cnTue, 30 Sep 2025 02:31:06 GMTTue, 30 Sep 2025 02:31:06 GMT60璁鴻皟鐢ㄧ害瀹?http://m.shnenglu.com/RancyGe/archive/2006/07/17/10150.html閫冮?/dc:creator>閫冮?/author>Mon, 17 Jul 2006 02:06:00 GMThttp://m.shnenglu.com/RancyGe/archive/2006/07/17/10150.htmlhttp://m.shnenglu.com/RancyGe/comments/10150.htmlhttp://m.shnenglu.com/RancyGe/archive/2006/07/17/10150.html#Feedback1http://m.shnenglu.com/RancyGe/comments/commentRss/10150.htmlhttp://m.shnenglu.com/RancyGe/services/trackbacks/10150.html

璁鴻皟鐢ㄧ害瀹?

鍦–璇█涓紝鍋囪鎴戜滑鏈夎繖鏍風(fēng)殑涓涓嚱鏁幫細(xì)

int function(int a,int b)

璋冪敤鏃跺彧瑕佺敤result = function(1,2)榪欐牱鐨勬柟寮忓氨鍙互浣跨敤榪欎釜鍑芥暟銆備絾鏄紝褰撻珮綰ц璦琚紪璇戞垚璁$畻鏈哄彲浠ヨ瘑鍒殑鏈哄櫒鐮佹椂錛屾湁涓涓棶棰樺氨鍑哥幇鍑烘潵錛氬湪CPU涓紝璁$畻鏈烘病鏈夊姙娉曠煡閬撲竴涓嚱鏁拌皟鐢ㄩ渶瑕佸灝戜釜銆佷粈涔堟牱鐨勫弬鏁幫紝涔熸病鏈夌‖浠跺彲浠ヤ繚瀛樿繖浜涘弬鏁般備篃灝辨槸璇達(dá)紝璁$畻鏈轟笉鐭ラ亾鎬庝箞緇欒繖涓嚱鏁頒紶閫掑弬鏁幫紝浼犻掑弬鏁扮殑宸ヤ綔蹇呴』鐢卞嚱鏁拌皟鐢ㄨ呭拰鍑芥暟鏈韓鏉ュ崗璋冦備負(fù)姝わ紝璁$畻鏈烘彁渚涗簡(jiǎn)涓縐嶈縐頒負(fù)鏍堢殑鏁版嵁緇撴瀯鏉ユ敮鎸佸弬鏁頒紶閫掋?/p>

鏍堟槸涓縐嶅厛榪涘悗鍑虹殑鏁版嵁緇撴瀯錛屾爤鏈変竴涓瓨鍌ㄥ尯銆佷竴涓爤欏舵寚閽堛傛爤欏舵寚閽堟寚鍚戝爢鏍堜腑絎竴涓彲鐢ㄧ殑鏁版嵁欏癸紙琚О涓烘爤欏訛級(jí)銆傜敤鎴峰彲浠ュ湪鏍堥《涓婃柟鍚戞爤涓姞鍏ユ暟鎹紝榪欎釜鎿嶄綔琚О涓哄帇鏍?Push)錛屽帇鏍堜互鍚庯紝鏍堥《鑷姩鍙樻垚鏂板姞鍏ユ暟鎹」鐨勪綅緗紝鏍堥《鎸囬拡涔熼殢涔嬩慨鏀廣傜敤鎴蜂篃鍙互浠庡爢鏍堜腑鍙栬蛋鏍堥《錛岀О涓哄脊鍑烘爤(pop)錛屽脊鍑烘爤鍚庯紝鏍堥《涓嬬殑涓涓厓绱犲彉鎴愭爤欏訛紝鏍堥《鎸囬拡闅忎箣淇敼銆?/p>

鍑芥暟璋冪敤鏃訛紝璋冪敤鑰呬緷嬈℃妸鍙傛暟鍘嬫爤錛岀劧鍚庤皟鐢ㄥ嚱鏁幫紝鍑芥暟琚皟鐢ㄤ互鍚庯紝鍦ㄥ爢鏍堜腑鍙栧緱鏁版嵁錛屽茍榪涜璁$畻銆傚嚱鏁拌綆楃粨鏉熶互鍚庯紝鎴栬呰皟鐢ㄨ呫佹垨鑰呭嚱鏁版湰韜慨鏀瑰爢鏍堬紝浣垮爢鏍堟仮澶嶅師瑁呫?/p>

鍦ㄥ弬鏁頒紶閫掍腑錛屾湁涓や釜寰堥噸瑕佺殑闂蹇呴』寰楀埌鏄庣‘璇存槑錛?/p>

  • 褰撳弬鏁頒釜鏁板浜庝竴涓椂錛屾寜鐓т粈涔堥『搴忔妸鍙傛暟鍘嬪叆鍫嗘爤
  • 鍑芥暟璋冪敤鍚庯紝鐢辮皝鏉ユ妸鍫嗘爤鎭㈠鍘熻

鍦ㄩ珮綰ц璦涓紝閫氳繃鍑芥暟璋冪敤綰﹀畾鏉ヨ鏄庤繖涓や釜闂銆傚父瑙佺殑璋冪敤綰﹀畾鏈夛細(xì)

  • stdcall
  • cdecl
  • fastcall
  • thiscall
  • naked call

stdcall璋冪敤綰﹀畾

stdcall寰堝鏃跺欒縐頒負(fù)pascal璋冪敤綰﹀畾錛屽洜涓簆ascal鏄棭鏈熷緢甯歌鐨勪竴縐嶆暀瀛︾敤璁$畻鏈虹▼搴忚璁¤璦錛屽叾璇硶涓ヨ皚錛屼嬌鐢ㄧ殑鍑芥暟璋冪敤綰﹀畾灝辨槸stdcall銆傚湪Microsoft C++緋誨垪鐨凜/C++緙栬瘧鍣ㄤ腑錛屽父甯哥敤PASCAL瀹忔潵澹版槑榪欎釜璋冪敤綰﹀畾錛岀被浼肩殑瀹忚繕鏈塛INAPI鍜孋ALLBACK銆?/p>

stdcall璋冪敤綰﹀畾澹版槑鐨勮娉曚負(fù)(浠ュ墠鏂囩殑閭d釜鍑芥暟涓轟緥錛夛細(xì)

int __stdcall function(int a,int b)

stdcall鐨勮皟鐢ㄧ害瀹氭剰鍛崇潃錛?錛夊弬鏁頒粠鍙沖悜宸﹀帇鍏ュ爢鏍堬紝2錛夊嚱鏁拌嚜韜慨鏀瑰爢鏍?3)鍑芥暟鍚嶈嚜鍔ㄥ姞鍓嶅鐨勪笅鍒掔嚎錛屽悗闈㈢揣璺熶竴涓狜絎﹀彿錛屽叾鍚庣揣璺熺潃鍙傛暟鐨勫昂瀵?/p>

浠ヤ笂榪拌繖涓嚱鏁頒負(fù)渚嬶紝鍙傛暟b棣栧厛琚帇鏍堬紝鐒跺悗鏄弬鏁癮錛屽嚱鏁拌皟鐢╢unction(1,2)璋冪敤澶勭炕璇戞垚姹囩紪璇█灝嗗彉鎴愶細(xì)

push 2 絎簩涓弬鏁板叆鏍?push 1 絎竴涓弬鏁板叆鏍?call function 璋冪敤鍙傛暟錛屾敞鎰忔鏃惰嚜鍔ㄦ妸cs:eip鍏ユ爤

鑰屽浜庡嚱鏁拌嚜韜紝鍒欏彲浠ョ炕璇戜負(fù)錛?

push ebp 淇濆瓨ebp瀵勫瓨鍣紝璇ュ瘎瀛樺櫒灝嗙敤鏉ヤ繚瀛樺爢鏍堢殑鏍堥《鎸囬拡錛屽彲浠ュ湪鍑芥暟閫鍑烘椂鎭㈠ mov ebp,esp 淇濆瓨鍫嗘爤鎸囬拡 mov eax,[ebp + 8H] 鍫嗘爤涓璭bp鎸囧悜浣嶇疆涔嬪墠渚濇淇濆瓨鏈塭bp,cs:eip,a,b,ebp +8鎸囧悜a add eax,[ebp + 0CH] 鍫嗘爤涓璭bp + 12澶勪繚瀛樹簡(jiǎn)b mov esp,ebp 鎭㈠esp pop ebp ret 8

鑰屽湪緙栬瘧鏃訛紝榪欎釜鍑芥暟鐨勫悕瀛楄緲昏瘧鎴恄function@8

娉ㄦ剰涓嶅悓緙栬瘧鍣ㄤ細(xì)鎻掑叆鑷繁鐨勬眹緙栦唬鐮佷互鎻愪緵緙栬瘧鐨勯氱敤鎬э紝浣嗘槸澶т綋浠g爜濡傛銆傚叾涓湪鍑芥暟寮濮嬪淇濈暀esp鍒癳bp涓紝鍦ㄥ嚱鏁扮粨鏉熸仮澶嶆槸緙栬瘧鍣ㄥ父鐢ㄧ殑鏂規(guī)硶銆?/p>

浠庡嚱鏁拌皟鐢ㄧ湅錛?鍜?渚濇琚玴ush榪涘爢鏍堬紝鑰屽湪鍑芥暟涓張閫氳繃鐩稿浜巈bp(鍗沖垰榪涘嚱鏁版椂鐨勫爢鏍堟寚閽堬級(jí)鐨勫亸縐婚噺瀛樺彇鍙傛暟銆傚嚱鏁扮粨鏉熷悗錛宺et 8琛ㄧず娓呯悊8涓瓧鑺傜殑鍫嗘爤錛屽嚱鏁拌嚜宸辨仮澶嶄簡(jiǎn)鍫嗘爤銆?/p>

cdecl璋冪敤綰﹀畾

cdecl璋冪敤綰﹀畾鍙堢О涓篊璋冪敤綰﹀畾錛屾槸C璇█緙虹渷鐨勮皟鐢ㄧ害瀹氾紝瀹冪殑瀹氫箟璇硶鏄細(xì)

int function (int a ,int b) //涓嶅姞淇グ灝辨槸C璋冪敤綰﹀畾 int __cdecl function(int a,int b)//鏄庣‘鎸囧嚭C璋冪敤綰﹀畾

鍦ㄥ啓鏈枃鏃訛紝鍑轟箮鎴戠殑鎰忔枡錛屽彂鐜癱decl璋冪敤綰﹀畾鐨勫弬鏁板帇鏍堥『搴忔槸鍜宻tdcall鏄竴鏍風(fēng)殑錛屽弬鏁伴鍏堢敱鏈夊悜宸﹀帇鍏ュ爢鏍堛傛墍涓嶅悓鐨勬槸錛屽嚱鏁版湰韜笉娓呯悊鍫嗘爤錛岃皟鐢ㄨ呰礋璐f竻鐞嗗爢鏍堛傜敱浜庤繖縐嶅彉鍖栵紝C璋冪敤綰﹀畾鍏佽鍑芥暟鐨勫弬鏁扮殑涓暟鏄笉鍥哄畾鐨勶紝榪欎篃鏄疌璇█鐨勪竴澶х壒鑹層傚浜庡墠闈㈢殑function鍑芥暟錛屼嬌鐢╟decl鍚庣殑姹囩紪鐮佸彉鎴愶細(xì)

璋冪敤澶?/b> push 1 push 2 call function add esp,8 娉ㄦ剰錛氳繖閲岃皟鐢ㄨ呭湪鎭㈠鍫嗘爤琚皟鐢ㄥ嚱鏁癬function澶?/b> push ebp 淇濆瓨ebp瀵勫瓨鍣紝璇ュ瘎瀛樺櫒灝嗙敤鏉ヤ繚瀛樺爢鏍堢殑鏍堥《鎸囬拡錛屽彲浠ュ湪鍑芥暟閫鍑烘椂鎭㈠ mov ebp,esp 淇濆瓨鍫嗘爤鎸囬拡 mov eax,[ebp + 8H] 鍫嗘爤涓璭bp鎸囧悜浣嶇疆涔嬪墠渚濇淇濆瓨鏈塭bp,cs:eip,a,b,ebp +8鎸囧悜a add eax,[ebp + 0CH] 鍫嗘爤涓璭bp + 12澶勪繚瀛樹簡(jiǎn)b mov esp,ebp 鎭㈠esp pop ebp ret 娉ㄦ剰錛岃繖閲屾病鏈変慨鏀瑰爢鏍?/b>

MSDN涓錛岃淇グ鑷姩鍦ㄥ嚱鏁板悕鍓嶅姞鍓嶅鐨勪笅鍒掔嚎錛屽洜姝ゅ嚱鏁板悕鍦ㄧ鍙瘋〃涓璁板綍涓篲function錛屼絾鏄垜鍦ㄧ紪璇戞椂浼間箮娌℃湁鐪嬪埌榪欑鍙樺寲銆?/p>

鐢變簬鍙傛暟鎸夌収浠庡彸鍚戝乏欏哄簭鍘嬫爤錛屽洜姝ゆ渶寮濮嬬殑鍙傛暟鍦ㄦ渶鎺ヨ繎鏍堥《鐨勪綅緗紝鍥犳褰撻噰鐢ㄤ笉瀹氫釜鏁板弬鏁版椂錛岀涓涓弬鏁板湪鏍堜腑鐨勪綅緗偗瀹氳兘鐭ラ亾錛屽彧瑕佷笉瀹氱殑鍙傛暟涓暟鑳藉鏍規(guī)嵁絎竴涓悗鑰呭悗緇殑鏄庣‘鐨勫弬鏁扮‘瀹氫笅鏉ワ紝灝卞彲浠ヤ嬌鐢ㄤ笉瀹氬弬鏁幫紝渚嬪瀵逛簬CRT涓殑sprintf鍑芥暟錛屽畾涔変負(fù)錛?

int sprintf(char* buffer,const char* format,...)

鐢變簬鎵鏈夌殑涓嶅畾鍙傛暟閮藉彲浠ラ氳繃format紜畾錛屽洜姝や嬌鐢ㄤ笉瀹氫釜鏁扮殑鍙傛暟鏄病鏈夐棶棰樼殑銆?/p>

fastcall

fastcall璋冪敤綰﹀畾鍜宻tdcall綾諱技錛屽畠鎰忓懗鐫錛?

  • 鍑芥暟鐨勭涓涓拰絎簩涓狣WORD鍙傛暟錛堟垨鑰呭昂瀵告洿灝忕殑錛夐氳繃ecx鍜宔dx浼犻掞紝鍏朵粬鍙傛暟閫氳繃浠庡彸鍚戝乏鐨勯『搴忓帇鏍?
  • 琚皟鐢ㄥ嚱鏁版竻鐞嗗爢鏍?
  • 鍑芥暟鍚嶄慨鏀硅鍒欏悓stdcall

鍏跺0鏄庤娉曚負(fù)錛歩nt fastcall function(int a,int b)

thiscall

thiscall鏄敮涓涓涓笉鑳芥槑紜寚鏄庣殑鍑芥暟淇グ錛屽洜涓簍hiscall涓嶆槸鍏抽敭瀛椼傚畠鏄疌++綾繪垚鍛樺嚱鏁扮己鐪佺殑璋冪敤綰﹀畾銆傜敱浜庢垚鍛樺嚱鏁拌皟鐢ㄨ繕鏈変竴涓猼his鎸囬拡錛屽洜姝ゅ繀欏葷壒孌婂鐞嗭紝thiscall鎰忓懗鐫錛?

  • 鍙傛暟浠庡彸鍚戝乏鍏ユ爤
  • 濡傛灉鍙傛暟涓暟紜畾錛宼his鎸囬拡閫氳繃ecx浼犻掔粰琚皟鐢ㄨ咃紱濡傛灉鍙傛暟涓暟涓嶇‘瀹氾紝this鎸囬拡鍦ㄦ墍鏈夊弬鏁板帇鏍堝悗琚帇鍏ュ爢鏍堛?
  • 瀵瑰弬鏁頒釜鏁頒笉瀹氱殑錛岃皟鐢ㄨ呮竻鐞嗗爢鏍堬紝鍚﹀垯鍑芥暟鑷繁娓呯悊鍫嗘爤

涓轟簡(jiǎn)璇存槑榪欎釜璋冪敤綰﹀畾錛屽畾涔夊涓嬬被鍜屼嬌鐢ㄤ唬鐮侊細(xì)

class A { public: 聽聽 int function1(int a,int b); 聽聽 int function2(int a,...); }; int A::function1 (int a,int b) { 聽聽 return a+b; } #include  int A::function2(int a,...) { 聽聽 va_list ap; 聽聽 va_start(ap,a); 聽聽 int i; 聽聽 int result = 0; 聽聽 for(i = 0 ; i < a ; i ++) 聽聽 { 聽聽聽聽 result += va_arg(ap,int); 聽聽 } 聽聽 return result; } void callee() { 聽聽 A a; 聽聽 a.function1 (1,2); 聽聽 a.function2(3,1,2,3); } 

callee鍑芥暟琚炕璇戞垚姹囩紪鍚庡氨鍙樻垚錛?

//鍑芥暟function1璋冪敤 0401C1D push 2 00401C1F push 1 00401C21 lea ecx,[ebp-8] 00401C24 call function1 娉ㄦ剰錛岃繖閲宼his娌℃湁琚叆鏍?//鍑芥暟function2璋冪敤 00401C29 push 3 00401C2B push 2 00401C2D push 1 00401C2F push 3 00401C31 lea eax,[ebp-8] 榪欓噷寮曞叆this鎸囬拡 00401C34 push eax 00401C35 call function2 00401C3A add esp,14h

鍙錛屽浜庡弬鏁頒釜鏁板浐瀹氭儏鍐典笅錛屽畠綾諱技浜巗tdcall錛屼笉瀹氭椂鍒欑被浼糲decl

naked call

榪欐槸涓涓緢灝戣鐨勮皟鐢ㄧ害瀹氾紝涓鑸▼搴忚璁¤呭緩璁笉瑕佷嬌鐢ㄣ傜紪璇戝櫒涓嶄細(xì)緇欒繖縐嶅嚱鏁板鍔犲垵濮嬪寲鍜屾竻鐞嗕唬鐮侊紝鏇寸壒孌婄殑鏄紝浣犱笉鑳界敤return榪斿洖榪斿洖鍊鹼紝鍙兘鐢ㄦ彃鍏ユ眹緙栬繑鍥炵粨鏋溿傝繖涓鑸敤浜庡疄妯″紡椹卞姩紼嬪簭璁捐錛屽亣璁懼畾涔変竴涓眰鍜岀殑鍔犳硶紼嬪簭錛屽彲浠ュ畾涔変負(fù)錛?

__declspec(naked) int add(int a,int b) { __asm mov eax,a __asm add eax,b __asm ret } 

娉ㄦ剰錛岃繖涓嚱鏁版病鏈夋樉寮忕殑return榪斿洖鍊鹼紝榪斿洖閫氳繃淇敼eax瀵勫瓨鍣ㄥ疄鐜幫紝鑰屼笖榪為鍑哄嚱鏁扮殑ret鎸囦護(hù)閮藉繀欏繪樉寮忔彃鍏ャ備笂闈唬鐮佽緲昏瘧鎴愭眹緙栦互鍚庡彉鎴愶細(xì)

mov eax,[ebp+8] add eax,[ebp+12] ret 8

娉ㄦ剰榪欎釜淇グ鏄拰__stdcall鍙?qiáng)cdecl緇撳悎浣跨敤鐨勶紝鍓嶉潰鏄畠鍜宑decl緇撳悎浣跨敤鐨勪唬鐮侊紝瀵逛簬鍜宻tdcall緇撳悎鐨勪唬鐮侊紝鍒欏彉鎴愶細(xì)

__declspec(naked) int __stdcall function(int a,int b) { __asm mov eax,a __asm add eax,b __asm ret 8 //娉ㄦ剰鍚庨潰鐨? } 

鑷充簬榪欑鍑芥暟琚皟鐢紝鍒欏拰鏅氱殑cdecl鍙?qiáng)stdcall璋冪敤鍑芥暟涓鑷淬?/p>

鍑芥暟璋冪敤綰﹀畾瀵艱嚧鐨勫父瑙侀棶棰?/h2>

濡傛灉瀹氫箟鐨勭害瀹氬拰浣跨敤鐨勭害瀹氫笉涓鑷達(dá)紝鍒欏皢瀵艱嚧鍫嗘爤琚牬鍧忥紝瀵艱嚧涓ラ噸闂錛屼笅闈㈡槸涓ょ甯歌鐨勯棶棰橈細(xì)

  1. 鍑芥暟鍘熷瀷澹版槑鍜屽嚱鏁頒綋瀹氫箟涓嶄竴鑷?
  2. DLL瀵煎叆鍑芥暟鏃跺0鏄庝簡(jiǎn)涓嶅悓鐨勫嚱鏁扮害瀹?

浠ュ悗鑰呬負(fù)渚嬶紝鍋囪鎴戜滑鍦╠ll縐嶅0鏄庝簡(jiǎn)涓縐嶅嚱鏁頒負(fù)錛?

__declspec(dllexport) int func(int a,int b);//娉ㄦ剰錛岃繖閲屾病鏈塻tdcall錛屼嬌鐢ㄧ殑鏄痗decl

浣跨敤鏃朵唬鐮佷負(fù)錛?

 typedef int (*WINAPI DLLFUNC)func(int a,int b); hLib = LoadLibrary(...); DLLFUNC func = (DLLFUNC)GetProcAddress(...)//榪欓噷淇敼浜?jiǎn)璋冪敤绾﹀?result = func(1,2);//瀵艱嚧閿欒 

鐢變簬璋冪敤鑰呮病鏈夌悊瑙INAPI鐨勫惈涔夐敊璇殑澧炲姞浜?jiǎn)杩欎釜淇图屼笂杩颁唬鐮佸繀鐒跺D嚧鍫嗘爤琚牬鍧忥紝MFC鍦ㄧ紪璇戞椂鎻掑叆鐨刢heckesp鍑芥暟灝嗗憡璇変綘錛屽爢鏍堣鐮村潖浜?jiǎn)銆?/p>

]]>鍗佷竴銆?MFC涓嬬殑鏂囦歡綾?http://m.shnenglu.com/RancyGe/archive/2006/05/22/7496.html閫冮?/dc:creator>閫冮?/author>Mon, 22 May 2006 08:13:00 GMThttp://m.shnenglu.com/RancyGe/archive/2006/05/22/7496.htmlhttp://m.shnenglu.com/RancyGe/comments/7496.htmlhttp://m.shnenglu.com/RancyGe/archive/2006/05/22/7496.html#Feedback1http://m.shnenglu.com/RancyGe/comments/commentRss/7496.htmlhttp://m.shnenglu.com/RancyGe/services/trackbacks/7496.html1銆?a name="_Toc452640992">鏂囦歡鎿嶄綔鐨勬柟娉?/strong>

聽聽聽浣跨敤Visual C++緙栫▼錛屾湁濡備笅鏂規(guī)硶榪涜鏂囦歡鎿嶄綔錛?/font>

錛?錛変嬌鐢ㄦ爣鍑咰榪愯搴撳嚱鏁幫紝鍖呮嫭fopen銆乫close銆乫seek絳夈?/font>

聽聽聽錛?錛変嬌鐢╓in16涓嬬殑鏂囦歡鍜岀洰褰曟搷浣滃嚱鏁幫紝濡俵open銆乴close銆乴seek絳夈備笉榪囷紝鍦╓in32涓嬶紝榪欎簺鍑芥暟涓昏鏄負(fù)浜?jiǎn)鍜學(xué)in16鍚戝悗鍏煎銆?/font>

聽聽聽錛?錛変嬌鐢╓in32涓嬬殑鏂囦歡鍜岀洰褰曟搷浣滃嚱鏁幫紝濡侰reateFile錛孋opyFile錛孌eleteFile錛孎indNextFile錛岀瓑絳夈?/font>

聽聽聽聽聽聽Win32涓嬶紝鎵撳紑鍜屽垱寤烘枃浠墮兘鐢盋reateFile瀹屾垚錛屾垚鍔熺殑璇濓紝寰楀埌涓涓猈in32涓嬬殑鍙ユ焺錛岃繖涓嶅悓浜庘淐鈥濈殑fopen榪斿洖鐨勫彞鏌勩傚湪Win16涓嬶紝璇ュ彞鏌勫拰C榪愯搴撴枃浠舵搷浣滃嚱鏁扮浉瀹廣備絾鍦╓in32涓嬶紝鈥淐鈥濈殑鏂囦歡鎿嶄綔鍑芥暟涓嶈兘浣跨敤璇ュ彞鏌勶紝濡傛灉闇瑕佺殑璇濓紝鍙互浣跨敤鍑芥暟_open_osfhandle浠嶹in32鍙ユ焺寰楀埌涓涓淐鈥濇枃浠跺嚱鏁板彲浠ヤ嬌鐢ㄧ殑鏂囦歡鍙ユ焺銆?/font> 鍏抽棴鏂囦歡浣跨敤Win32鐨凜loseHandle銆?/font> 鍦╓in32涓嬶紝CreateFile鍙互鎿嶄綔鐨勫璞¢櫎浜?jiǎn)纾佺洏鏂囦欢澶栧Q岃繕鍖呮嫭璁懼鏂囦歡濡傞氳绔彛銆佺閬撱佹帶鍒跺彴杈撳叆銆侀偖浠舵Ы絳夌瓑銆?/font>

錛?錛変嬌鐢–File鍜屽叾媧劇敓綾昏繘琛屾枃浠舵搷浣溿侰File浠嶤Object媧劇敓錛屽叾媧劇敓綾誨寘鎷搷浣滄枃鏈枃浠剁殑CStdioFile錛屾搷浣滃唴瀛樻枃浠剁殑CmemFile錛岀瓑絳夈侰File鏄緩绔嬪湪Win32鐨勬枃浠舵搷浣滀綋緋葷殑鍩虹涓婏紝瀹冨皝瑁呬簡(jiǎn)閮ㄥ垎Win32鏂囦歡鎿嶄綔鍑芥暟銆傛渶濂芥槸浣跨敤CFile綾伙紙鎴栨淳鐢熺被錛夌殑瀵硅薄鏉ユ搷浣滄枃浠訛紝蹇呰鐨勮瘽錛屽彲浠ヤ粠榪欎簺綾繪淳鐢熻嚜宸辯殑鏂囦歡鎿嶄綔綾匯傜粺涓浣跨敤CFile鐨勭晫闈㈠彲浠ュ緱鍒板ソ鐨勭Щ妞嶆с?br />

2銆?a name="_Toc452640992">鏂囦歡鎿嶄綔鐨勬柟娉?
MFC鐢ㄤ竴浜涚被鏉ュ皝瑁呮枃浠惰闂殑Win32 API銆備互CFile涓哄熀紜錛屼粠CFile媧劇敓鍑哄嚑涓被錛屽CStdioFile錛孋MemFile錛孧FC鍐呴儴浣跨敤鐨凜MiororFile錛岀瓑絳夈?br />

2.1銆丆File鐨勭粨鏋?/b>

聽聽聽聽聽2.1.1銆丆File瀹氫箟鐨勬灇涓劇被鍨?/b>

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽CFile綾誨畾涔変簡(jiǎn)涓浜涘拰鏂囦歡鎿嶄綔鐩稿叧鐨勬灇涓劇被鍨嬶紝涓昏鏈夊洓縐嶏細(xì)OpenFlags錛孉ttribute錛孲eekPosition錛宧FileNull銆備笅闈紝鍒嗗埆瑙i噴榪欎簺鏋氫婦綾誨瀷銆?/p>

  1. OpenFlags

    OpenFlags瀹氫箟浜?3縐嶆枃浠惰闂拰鍏變韓妯″紡錛?/p>

    enum OpenFlags {

    //絎竴錛堜粠鍙籌紝涓嬪悓錛夎嚦絎簩浣嶏紝鎵撳紑鏂囦歡鏃惰闂ā寮忥紝璇?鍐?璇誨啓

    modeRead = 0x0000,

    modeWrite = 0x0001,

    modeReadWrite = 0x0002,

    shareCompat = 0x0000, //32浣峂FC涓病鐢?/p>

    //絎簲鍒扮涓冧綅錛屾墦寮鏂囦歡鏃剁殑鍏變韓妯″紡

    shareExclusive = 0x0010,//鐙崰鏂瑰紡錛岀姝㈠叾浠栬繘紼嬭鍐?/p>

    shareDenyWrite = 0x0020,//紱佹鍏朵粬榪涚▼鍐?/p>

    shareDenyRead = 0x0030,//紱佹鍏朵粬榪涚▼璇?/p>

    shareDenyNone = 0x0040,//鍏佽鍏朵粬榪涚▼鍐?/p>

    //絎叓浣嶏紝鎵撳紑鏂囦歡鏃剁殑鏂囦歡緇ф壙鏂瑰紡

    modeNoInherit = 0x0080,//涓嶅厑璁稿瓙榪涚▼緇ф壙

    //絎崄涓夈佸崄鍥涗綅錛屾槸鍚﹀垱寤烘柊鏂囦歡鍜屽垱寤烘柟寮?/p>

    modeCreate = 0x1000,//鍒涘緩鏂版枃浠訛紝鏂囦歡闀垮害0

    modeNoTruncate = 0x2000,//鍒涘緩鏂版枃浠舵椂濡傛枃浠跺凡瀛樺湪鍒欐墦寮

    //絎崄浜斻佸崄鍏綅錛屾枃浠朵互浜岃繘鍒舵垨鑰呮枃鏈柟寮忔墦寮錛屽湪媧劇敓綾籆StdioFile涓敤

    typeText = 0x4000,

    typeBinary = (int)0x8000

    };

  2. Attribute

    Attribute瀹氫箟浜?jiǎn)鏂囦欢灞炴э細(xì)姝e父銆佸彧璇匯侀殣鍚佺郴緇熸枃浠訛紝鏂囦歡鎴栬呯洰褰曠瓑銆?/p>

    enum Attribute {

    normal = 0x00,

    readOnly = 0x01,

    hidden = 0x02,

    system = 0x04,

    volume = 0x08,

    directory = 0x10,

    archive = 0x20

    }

  3. SeekPosition

    SeekPosition瀹氫箟浜?jiǎn)涓壙U嶆枃浠朵綅緗細(xì)澶淬佸熬銆佸綋鍓嶏細(xì)

    enum SeekPosition{

    begin = 0x0,

    current = 0x1,

    end = 0x2

    };

  4. hFileNull

hFileNull瀹氫箟浜?jiǎn)绌烘枃錃g鍙ユ焺

enum { hFileNull = -1 };

2.1.2銆丆File鐨勫叾浠栦竴浜涙垚鍛樺彉閲?/b>

CFile闄や簡(jiǎn)瀹氫箟鏋氫婦綾誨瀷錛岃繕瀹氫箟浜?jiǎn)涓浜涙垚鍛樺彉閲忋備緥濡傦細(xì)

UINT m_hFile

璇ユ垚鍛樺彉閲忔槸public璁塊棶灞炴э紝淇濆瓨::CreateFile榪斿洖鐨勬搷浣滅郴緇熺殑鏂囦歡鍙ユ焺銆侻FC閲嶈澆浜?jiǎn)杩惤帡绗﹀彿HFILE鏉ヨ繑鍥瀖_hFile錛岃繖鏍峰湪浣跨敤HFILE綾誨瀷鍙橀噺鐨勫湴鏂瑰彲浠ヤ嬌鐢–File瀵硅薄銆?/p>

BOOL m_bCloseOnDelete;

CString m_strFileName;

榪欎袱涓垚鍛樺彉閲忔槸protected璁塊棶灞炴с俶_bCloseOnDelete鐢ㄦ潵鎸囩ず鏄惁鍦ㄥ叧闂枃浠舵椂鍒犻櫎CFile瀵硅薄錛沵_strFileName鐢ㄦ潵淇濆瓨鏂囦歡鍚嶃?br />
2.1.3銆丆File鐨勬垚鍛樺嚱鏁?/b>

CFile鐨勬垚鍛樺嚱鏁板疄鐜頒簡(jiǎn)瀵筗in32鏂囦歡鎿嶄綔鍑芥暟鐨勫皝瑁咃紝瀹屾垚浠ヤ笅鍔ㄤ綔錛氭墦寮銆佸垱寤恒佸叧闂枃浠訛紝鏂囦歡鎸囬拡瀹氫綅錛屾枃浠剁殑閿佸畾涓庤В閿侊紝鏂囦歡鐘舵佺殑璇誨彇鍜屼慨鏀癸紝絳夌瓑銆傚叾涓紝鐢ㄥ埌浜?jiǎn)m_hFile鏂囦歡鍙ユ焺鐨勪竴鑸槸铏氭嫙鍑芥暟錛屽拰姝ゆ棤鍏崇殑涓鑸槸闈欐佹垚鍛樺嚱鏁般備竴鑸湴錛屾垚鍛樺嚱鏁拌鏄犲皠鍒板搴旂殑Win32鍑芥暟錛屽琛?1-1鎵紺恒?/p>

琛?1-1 CFile鍑芥暟瀵筗in32鏂囦歡鍑芥暟鐨勫皝瑁?/p>

铏氭嫙

闈欐?

鎴愬憳鍑芥暟

瀵瑰簲鐨刉in32鍑芥暟

鏂囦歡鐨勫垱寤恒佹墦寮銆佸叧闂?

鈭?

Abort

CloseHandle

鈭?

Duplicate

DuplicateHandle

鈭?

Open

CreateFile

鈭?

Close

CloseHandle

鏂囦歡鐨勮鍐?

鈭?

Read

ReadFile

ReadHuge錛堝悜鍚庡吋瀹癸級(jí)

璋冪敤Read鎴愬憳鍑芥暟

鈭?

Write

WriteFile

WriteHuage(鍚戝悗鍏煎)

璋冪敤Write鎴愬憳鍑芥暟

鈭?

Flush

FlushFileBuffers

鏂囦歡瀹氫綅

鈭?

Seek

SetFilePointer

SeekToBegin

璋冪敤Seek鎴愬憳鍑芥暟

SeekToEnd

璋冪敤Seek鎴愬憳鍑芥暟

鈭?

GetLength

璋冪敤Seek鎴愬憳鍑芥暟

鈭?

SetLength

SetEndOfFile

鏂囦歡鐨勯攣瀹?瑙i攣

鈭?

LockRange

LockFile

鈭?

UnlockRange

UnlockFile

鏂囦歡鐘舵佹搷浣滃嚱鏁?

鈭?

GetPosition

SetFilePointer

GetStatus(CFileStatus&)

GetFileTime,GetFileSize絳?

鈭?

GetStatus(LPSTR lpszFileName CFileStatus&)

FindFirstFile

鈭?

GetFileName

涓嶆槸綆鍗曞湴鏄犲皠鍒版煇涓嚱鏁?

鈭?

GetFileTitle

鈭?

GetFilePath

鈭?

SetFilePath

鈭?

SetStatus

鏀瑰悕鍜屽垹闄?

鈭?

Rename

MoveFile

鈭?

Remove

DeleteFile


2.1.4銆丆File鐨勯儴鍒嗗疄鐜?/b>

榪欓噷涓昏璁ㄨCFile瀵硅薄鐨勬瀯閫犲嚱鏁板拰鏂囦歡鐨勬墦寮/鍒涘緩鐨勮繃紼嬨?/p>

  1. 鏋勯犲嚱鏁?

CFile鏈夊涓嬪嚑涓瀯閫犲嚱鏁幫細(xì)

  • CFile()

緙虹渷鏋勯犲嚱鏁幫紝浠呬粎鏋勯犱竴涓狢File瀵硅薄錛岃繕蹇呴』浣跨敤Open鎴愬憳鍑芥暟鏉ユ墦寮鏂囦歡銆?/p>

  • CFile(int hFile)

宸茬粡鎵撳紑浜?jiǎn)涓涓枃浠秇File錛屽湪姝ゅ熀紜涓婃瀯閫犱竴涓狢File瀵硅薄鏉ョ粰瀹冩墦鍖呫侶File灝嗚璧嬪肩粰C(jī)File鐨勬垚鍛樺彉閲弇_hFile銆?/p>

  • CFile(LPCTSTR lpszFileName, UINT nOpenFlags)

鎸囧畾涓涓枃浠跺悕鍜屾枃浠舵墦寮鏂瑰紡錛屾瀯閫燙File瀵硅薄錛岃皟鐢∣pen鎵撳紑/鍒涘緩鏂囦歡錛屾妸鏂囦歡鍙ユ焺淇濆瓨鍒癿_hFile銆?/p>

  1. 鎵撳紑/鍒涘緩鏂囦歡

Open鐨勫師鍨嬪涓嬶細(xì)

BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags,

CFileException* pException)

Open璋冪敤Win32鍑芥暟::CreateFile鎵撳紑鏂囦歡錛屽茍鎶婃枃浠跺彞鏌勪繚瀛樺埌鎴愬憳鍙橀噺m_hFile涓?/p>

CreateFile鍑芥暟鐨勫師鍨嬪涓嬶細(xì)

HANDLE CreateFile(

LPCTSTR lpFileName,// pointer to name of the file

DWORD dwDesiredAccess,// access (read-write) mode

DWORD dwShareMode,// share mode

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //pointer to security descriptor

DWORD dwCreationDistribution,// how to create

DWORD dwFlagsAndAttributes,// file attributes

HANDLE hTemplateFile// handle to file with attributes to copy

);

鏄劇劧錛孫pen蹇呴』鎶婅嚜宸辯殑涓や釜鍙傛暟l(fā)pszFileName鍜宯OpenFlags鏄犲皠鍒癈reateFile鐨勪竷涓弬鏁頒笂銆?/p>

浠嶰penFlags鐨勫畾涔夊彲浠ョ湅鍑猴紝錛坣OpenFlags & 3)琛ㄧず浜?jiǎn)璇诲啓鏍囪瘑锛屾槧灏勬垚鍙橀噺dwAccess錛屽彲浠ュ彇鍊間負(fù)Win32鐨凣ENERIC_READ銆丟ENERIC_WRITE銆丟ENERIC_READ|GENERIC_WRITE銆?/p>

錛坣OpenFlags & 0x70)琛ㄧず浜?jiǎn)鍏变韩妯″紡锛屾槧灏勬垚鍙橀噺dwShareMode錛屽彲浠ュ彇鍊間負(fù)Win32鐨凢ILE_SHARE_READ銆丗ILE_SHARE_WRITE銆丗ILE_SHARE_WRITE|FILE_SHARE_READ銆?/p>

Open瀹氫箟浜?jiǎn)涓涓眬閮ㄧ殑SECURITY_ATTRIBUTES鍙橀噺sa錛?nOpenFlags & 0x80)琚祴鍊肩粰sa.bInheritHandle銆?/p>

(nOpenFlags & modeCreate)琛ㄧず浜?jiǎn)鍒涘缓鏂瑰紡锛屾槧灏勬垚鍙橀噺dwCreateFlag錛屽彲浠ュ彇鍊間負(fù)Win32鐨凮PEN_ALWAYS銆丆REATE_ALWAYS銆丱PEN_EXISTING銆?/p>

鍦ㄧ敓鎴愪簡(jiǎn)涓婅堪鍙傛暟涔嬪悗錛屽厛璋冪敤::CreateFile錛?/p>

HANDLE hFile =::CreateFile(lpszFileName,

dwAccess, dwShareMode, &sa,

dwCreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);

鐒跺悗錛宧File琚祴鍊肩粰鎴愬憳鍙橀噺m_hFile錛宮_bCloseOnDelete琚緗負(fù)TRUE銆?/p>

鐢變笂鍙互鐪嬪嚭錛孋File鎵撳紑(鍒涘緩)涓涓枃浠舵椂澶уぇ綆鍖栦簡(jiǎn):: CreateFile鍑芥暟鐨勫鏉傛э紝鍗沖彧闇瑕佹寚瀹氫竴涓枃浠跺悕銆佷竴涓墦寮鏂囦歡鐨勫弬鏁板嵆鍙傝嫢璇ュ弬鏁版寚瀹氫負(fù)0錛屽垯琛ㄧず浠ュ彧璇繪柟寮忔墦寮涓涓瓨鍦ㄧ殑鏂囦歡錛岀嫭鍗犱嬌鐢紝涓嶅厑璁稿瓙榪涚▼緇ф壙銆?/p>

鍦–File瀵硅薄浣跨敤鏃訛紝濡傛灉瀹冩槸鍦ㄥ爢涓垎閰嶇殑錛屽垯搴旇閿姣佸畠錛涘鏋滃湪鏍堜腑鍒嗛厤鐨勶紝鍒機(jī)File瀵硅薄灝嗚鑷姩閿姣併傞攢姣佹椂鏋愭瀯鍑芥暟琚皟鐢紝鏋愭瀯鍑芥暟鏄櫄鎷熷嚱鏁般傝嫢m_bCloseOnDelete涓虹湡涓攎_hFile闈炵┖錛屽垯鏋愭瀯鍑芥暟璋冪敤Close鍏抽棴鏂囦歡銆?/p>

鑷充簬鍏朵粬CFile鎴愬憳鍑芥暟鐨勫疄鐜幫紝榪欓噷涓嶄綔鍒嗘瀽浜?jiǎn)銆?/p>

2.1.5銆丆File鐨勬淳鐢熺被

榪欓噷涓昏綆瑕佸湴浠嬬粛CStdioFile鍜孋memFile鍙?qiáng)CFileFind銆?/p>

  1. CStdioFile

    CStdioFile瀵規(guī)枃鏈枃浠惰繘琛屾搷浣溿?/p>

    CStdioFile瀹氫箟浜?jiǎn)鏂扮殑鎴愬憳鍙橀噺m_pStream錛岀被鍨嬫槸FILE*銆傚湪鎵撳紑鎴栬呭垱寤烘枃浠舵椂錛屼嬌鐢╛open_osfhandle浠巑_hFile(Win32鏂囦歡鍙ユ焺)寰楀埌涓涓淐鈥濈殑FILE綾誨瀷鐨勬枃浠舵寚閽堬紝鐒跺悗錛屽湪鏂囦歡鎿嶄綔涓紝浣跨敤鈥淐鈥濈殑鏂囦歡鎿嶄綔鍑芥暟銆備緥濡傦紝璇繪枃浠朵嬌鐢╛fread錛岃屼笉鏄?:ReadFile錛屽啓鏂囦歡浣跨敤浜?jiǎn)_fwrite錛岃屼笉鏄?:WriteFile錛岀瓑絳夈俶_hFile鏄疌File鐨勬垚鍛樺彉閲忋?/p>

    鍙﹀錛孋StdioFile涓嶆敮鎸丆File鐨凞umplicate銆丩ockRange銆乁nlockRange鎿嶄綔錛屼絾鏄疄鐜頒簡(jiǎn)涓や釜鏂扮殑鎿嶄綔ReadString鍜學(xué)riteString銆?/p>

  2. CMemFile

    CMemFile鎶婁竴鍧楀唴瀛樺綋浣滀竴涓枃浠舵潵鎿嶄綔錛屾墍浠ワ紝瀹冩病鏈夋墦寮鏂囦歡鐨勬搷浣滐紝鑰屾槸璁捐浜?jiǎn)Attach鍜孌etach鐢ㄦ潵鍒嗛厤鎴栬呴噴鏀句竴鍧楀唴瀛樸傜浉搴斿湴錛屽畠鎻愪緵浜?jiǎn)Alloc銆丗ree铏氭嫙鍑芥暟鏉ユ搷浣滃唴瀛樻枃浠訛紝瀹冭鐩栦簡(jiǎn)Read銆乄rite鏉ヨ鍐欏唴瀛樻枃浠躲?/p>

  3. CFileFind

涓轟簡(jiǎn)鏂逛究鏂囦歡鏌ユ壘錛孧FC鎶婃湁鍏沖姛鑳藉綊緇撴垚涓轟竴涓被CFileFind銆侰FileFind媧劇敓浜嶤Object綾匯傞鍏堬紝瀹冧嬌鐢‵indFile鍜孎ineNextFile鍖呰浜?jiǎn)Win32鍑芥暟::FindFirstFile鍜?:FindNextFile錛涘叾嬈★紝瀹冩彁渚涗簡(jiǎn)璁稿鍑芥暟鐢ㄦ潵鑾峰彇鏂囦歡鐨勭姸鎬佹垨鑰呭睘鎬с?/p>

浣跨敤CFileStatus緇撴瀯鏉ユ弿榪版枃浠剁殑灞炴э紝鍏跺畾涔夊涓嬶細(xì)

struct CFileStatus

{

CTime m_ctime; // 鏂囦歡鍒涘緩鏃墮棿

CTime m_mtime; // 鏂囦歡鏈榪戜竴嬈′慨鏀規(guī)椂闂?/p>

CTime m_atime; // 鏂囦歡鏈榪戜竴嬈¤闂椂闂?/p>

LONG m_size; // 鏂囦歡澶у皬

BYTE m_attribute; // 鏂囦歡灞炴?/p>

BYTE _m_padding; // 娌℃湁瀹為檯鍚箟錛岀敤鏉ュ鍔犱竴涓瓧鑺?/p>

TCHAR m_szFullName[_MAX_PATH]; //緇濆璺緞

#ifdef _DEBUG

//瀹炵幇Dump铏氭嫙鍑芥暟錛岃緭鍑烘枃浠跺睘鎬?/p>

void Dump(CDumpContext& dc) const;

#endif

};

渚嬪錛?/p>

CFileStatus status;

pFile->GetStatus(status);

#ifdef _DEBUG

status.dump(afxDump);

#endif



]]>
鍗併佸唴瀛樺垎閰嶆柟寮忓拰璋冭瘯鏈哄埗 http://m.shnenglu.com/RancyGe/archive/2006/04/17/5757.html閫冮?/dc:creator>閫冮?/author>Mon, 17 Apr 2006 08:09:00 GMThttp://m.shnenglu.com/RancyGe/archive/2006/04/17/5757.htmlhttp://m.shnenglu.com/RancyGe/comments/5757.htmlhttp://m.shnenglu.com/RancyGe/archive/2006/04/17/5757.html#Feedback2http://m.shnenglu.com/RancyGe/comments/commentRss/5757.htmlhttp://m.shnenglu.com/RancyGe/services/trackbacks/5757.html 10.1鍐呭瓨鍒嗛厤
聽聽10.1.1聽鍐呭瓨鍒嗛厤鍑芥暟

MFCWin32鎴栬匔璇█鐨勫唴瀛樺垎閰岮PI錛屾湁鍥涚鍐呭瓨鍒嗛厤API鍙緵浣跨敤銆?

  1. Win32鐨勫爢鍒嗛厤鍑芥暟

    姣忎竴涓繘紼嬮兘鍙互浣跨敤鍫嗗垎閰嶅嚱鏁板垱寤轟竴涓鏈夌殑鍫嗏攢鈹璋冪敤榪涚▼鍦板潃絀洪棿鐨勪竴涓垨鑰呭涓〉闈€侱LL鍒涘緩鐨勭鏈夊爢蹇呭畾鍦ㄨ皟鐢―LL鐨勮繘紼嬬殑鍦板潃絀洪棿鍐咃紝鍙兘琚皟鐢ㄨ繘紼嬭闂?

    HeapCreate鐢ㄦ潵鍒涘緩鍫嗭紱HeapAlloc鐢ㄦ潵浠庡爢涓垎閰嶄竴瀹氭暟閲忕殑絀洪棿錛孒eapAlloc鍒嗛厤鐨勫唴瀛樻槸涓嶈兘縐誨姩鐨勶紱HeapSize鍙互紜畾浠庡爢涓垎閰嶇殑絀洪棿鐨勫ぇ灝忥紱HeapFree鐢ㄦ潵閲婃斁浠庡爢涓垎閰嶇殑絀洪棿錛汬eapDestroy閿姣佸垱寤虹殑鍫嗐?

  2. Windows浼犵粺鐨勫叏灞鎴栬呭眬閮ㄥ唴瀛樺垎閰嶅嚱鏁?

    鐢變簬Win32閲囩敤騫抽潰鍐呭瓨緇撴瀯妯″紡錛學(xué)in32涓嬬殑鍏ㄥ眬鍜屽眬閮ㄥ唴瀛樺嚱鏁伴櫎浜?jiǎn)鍚嶅瓧涓嶅悓澶栧Q屽叾浠栧畬鍏ㄧ浉鍚屻備換涓鍑芥暟閮藉彲浠ョ敤鏉ュ垎閰嶄換鎰忓ぇ灝忕殑鍐呭瓨錛堜粎浠呭彈鍙敤鐗╃悊鍐呭瓨鐨勯檺鍒訛級(jí)銆傜敤娉曞彲浠ュ拰W(xué)in16涓嬪熀鏈竴鏍楓?

    Win32涓嬩繚鐣欒繖綾誨嚱鏁頒繚璇佷簡(jiǎn)鍜學(xué)in16鐨勫吋瀹廣?

  3. C璇█鐨勬爣鍑嗗唴瀛樺垎閰嶅嚱鏁?

    C璇█鐨勬爣鍑嗗唴瀛樺垎閰嶅嚱鏁板寘鎷互涓嬪嚱鏁幫細(xì)

    malloc錛宑alloc錛宺ealloc錛宖ree錛岀瓑銆?

    榪欎簺鍑芥暟鏈鍚庨兘鏄犲皠鎴愬爢API鍑芥暟錛屾墍浠ワ紝malloc鍒嗛厤鐨勫唴瀛樻槸涓嶈兘縐誨姩鐨勩傝繖浜涘嚱鏁扮殑璋冨紡鐗堟湰涓?

    malloc_dbg錛宑alloc_dbg錛宺ealloc_dbg錛宖ree_dbg錛岀瓑銆?

  4. Win32鐨勮櫄鎷熷唴瀛樺垎閰嶅嚱鏁?

铏氭嫙鍐呭瓨API鏄叾浠朅PI鐨勫熀紜銆傝櫄鎷熷唴瀛楢PI浠ラ〉涓烘渶灝忓垎閰嶅崟浣嶏紝X86涓婇〉闀垮害涓?KB錛屽彲浠ョ敤GetSystemInfo鍑芥暟鎻愬彇欏甸暱搴︺傝櫄鎷熷唴瀛樺垎閰嶅嚱鏁板寘鎷互涓嬪嚱鏁幫細(xì)

  • LPVOID VirtualAlloc(LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwAllocationType,

DWORD fdwProtect);

璇ュ嚱鏁扮敤鏉ュ垎閰嶄竴瀹氳寖鍥寸殑铏氭嫙欏點(diǎn)傚弬鏁?鎸囧畾璧峰鍦板潃錛涘弬鏁?鎸囧畾鍒嗛厤鍐呭瓨鐨勯暱搴︼紱鍙傛暟3鎸囧畾鍒嗛厤鏂瑰紡錛屽彇鍊糓EM_COMMINT鎴栬匨EM_RESERVE錛涘弬鏁?鎸囧畾鎺у埗璁塊棶鏈鍒嗛厤鐨勫唴瀛樼殑鏍囪瘑錛屽彇鍊間負(fù)PAGE_READONLY銆丳AGE_READWRITE鎴栬匬AGE_NOACCESS銆?

  • LPVOID VirtualAllocEx(HANDLE process,

LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwAllocationType,

DWORD fdwProtect);

璇ュ嚱鏁板姛鑳界被浼間簬VirtualAlloc錛屼絾鏄厑璁告寚瀹氳繘紼媝rocess銆俈irtaulFree銆乂irtualProtect銆乂irtualQuery閮芥湁瀵瑰簲鐨勬墿灞曞嚱鏁般?

  • BOOL VirtualFree(LPVOID lpvAddress,

DWORD dwSize,

DWORD dwFreeType);

璇ュ嚱鏁扮敤鏉ュ洖鏀舵垨鑰呴噴鏀懼垎閰嶇殑铏氭嫙鍐呭瓨銆傚弬鏁?鎸囧畾甯屾湜鍥炴敹鎴栬呴噴鏀懼唴瀛樼殑鍩哄湴鍧錛涘鏋滄槸鍥炴敹錛屽弬鏁?鍙互鎸囧悜铏氭嫙鍦板潃鑼冨洿鍐呯殑浠諱綍鍦版柟錛屽鏋滄槸閲婃斁錛屽弬鏁?蹇呴』鏄疺irtualAlloc榪斿洖鐨勫湴鍧錛涘弬鏁?鎸囧畾鏄惁閲婃斁鎴栬呭洖鏀跺唴瀛橈紝鍙栧間負(fù)MEM_DECOMMINT鎴栬匨EM_RELEASE銆?

  • BOOL VirtualProtect(LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwNewProtect,

PDWORD pfdwOldProtect);

璇ュ嚱鏁扮敤鏉ユ妸宸茬粡鍒嗛厤鐨勯〉鏀瑰彉鎴愪繚鎶ら〉銆傚弬鏁?鎸囧畾鍒嗛厤欏電殑鍩哄湴鍧錛涘弬鏁?鎸囧畾淇濇姢欏電殑闀垮害錛涘弬鏁?鎸囧畾欏電殑淇濇姢灞炴э紝鍙栧糚AGE_READ銆丳AGE_WRITE銆丳AGE_READWRITE絳夌瓑錛涘弬鏁?鐢ㄦ潵榪斿洖鍘熸潵鐨勪繚鎶ゅ睘鎬с?

  • DWORD VirtualQuery(LPCVOID lpAddress,

PMEMORY_BASIC_INFORMATION lpBuffer,

DWORD dwLength

);

璇ュ嚱鏁扮敤鏉ユ煡璇㈠唴瀛樹腑鎸囧畾欏電殑鐗規(guī)с傚弬鏁?鎸囧悜甯屾湜鏌ヨ鐨勮櫄鎷熷湴鍧錛涘弬鏁?鏄寚鍚戝唴瀛樺熀鏈俊鎭粨鏋勭殑鎸囬拡錛涘弬鏁?鎸囧畾鏌ヨ鐨勯暱搴︺?

  • BOOL VirtualLock(LPVOID lpAddress,DWORD dwSize);

璇ュ嚱鏁扮敤鏉ラ攣瀹氬唴瀛橈紝閿佸畾鐨勫唴瀛橀〉涓嶈兘浜ゆ崲鍒伴〉鏂囦歡銆傚弬鏁?鎸囧畾瑕侀攣瀹氬唴瀛樼殑璧峰鍦板潃錛涘弬鏁?鎸囧畾閿佸畾鐨勯暱搴︺?

  • BOOL VirtualUnLock(LPVOID lpAddress,DWORD dwSize);

鍙傛暟1鎸囧畾瑕佽В閿佺殑鍐呭瓨鐨勮搗濮嬪湴鍧錛涘弬鏁?鎸囧畾瑕佽В閿佺殑鍐呭瓨鐨勯暱搴︺?br />

C++鐨刵ew 鍜?delete鎿嶄綔絎?

MFC瀹氫箟浜?jiǎn)涓たU嶄綔鐢ㄨ寖鍥寸殑new鍜宒elete鎿嶄綔絎︺傚浜巒ew錛屼笉璁哄摢縐嶏紝鍙傛暟1綾誨瀷蹇呴』鏄痵ize_t錛屼笖榪斿洖void綾誨瀷鎸囬拡銆?

  1. 鍏ㄥ眬鑼冨洿鍐呯殑new鍜宒elete鎿嶄綔絎?

    鍘熷瀷濡備笅錛?

    void _cdecl ::operator new(size_t nSize);

    void __cdecl operator delete(void* p);

    璋冭瘯鐗堟湰錛?

    void* __cdecl operator new(size_t nSize, int nType,

    LPCSTR lpszFileName, int nLine)

  2. 綾誨畾涔夌殑new鍜宒elete鎿嶄綔絎?

鍘熷瀷濡備笅錛?

void* PASCAL classname::operator new(size_t nSize);

void PASCAL classname::operator delete(void* p);

綾葷殑operator new鎿嶄綔絎︽槸綾葷殑闈欐佹垚鍛樺嚱鏁幫紝瀵硅綾葷殑瀵硅薄鏉ヨ灝嗚鐩栧叏灞鐨刼perator new銆傚叏灞鐨刼perator new鐢ㄦ潵緇欏唴閮ㄧ被鍨嬪璞★紙濡俰nt錛夈佹病鏈夊畾涔塷perator new鎿嶄綔絎︾殑綾葷殑瀵硅薄鍒嗛厤鍐呭瓨銆?

new鎿嶄綔絎﹁鏄犲皠鎴恗alloc鎴栬卪alloc_dbg錛宒elete琚槧灝勬垚free鎴栬協(xié)ree_dbg銆?



10.1.2璋冭瘯鎵嬫

MFC搴旂敤紼嬪簭鍙互浣跨敤C榪愯搴撶殑璋冭瘯鎵嬫錛屼篃鍙互浣跨敤MFC鎻愪緵鐨勮皟璇曟墜孌點(diǎn)備袱縐嶈皟璇曟墜孌靛垎鍒榪板涓嬨?br />

  1. C榪愯搴撴彁渚涘拰鏀寔鐨勮皟璇曞姛鑳?/b>

    C榪愯搴撴彁渚涘拰鏀寔鐨勮皟璇曞姛鑳藉涓嬶細(xì)

    1. 璋冭瘯淇℃伅鎶ュ憡鍑芥暟

      鐢ㄦ潵鎶ュ憡搴旂敤紼嬪簭鐨勮皟璇曠増鏈繍琛屾椂鐨勮鍛婂拰鍑洪敊淇℃伅銆傚寘鎷細(xì)

      _CrtDbgReport 鐢ㄦ潵鎶ュ憡璋冭瘯淇℃伅錛?/p>

      _CrtSetReportMode 璁劇疆鏄惁璀﹀憡銆佸嚭閿欐垨鑰呮柇璦淇℃伅錛?/p>

      _CrtSetReportFile 璁劇疆鏄惁鎶婅皟璇曚俊鎭啓鍏ュ埌涓涓枃浠躲?/p>

    2. 鏉′歡楠岃瘉鎴栬呮柇璦瀹忥細(xì)

      鏂█瀹忎富瑕佹湁錛?/p>

      assert 媯(gè)楠屾煇涓潯浠舵槸鍚︽弧瓚籌紝涓嶆弧瓚崇粓姝㈢▼搴忔墽琛屻?/p>

      楠岃瘉鍑芥暟涓昏鏈夛細(xì)

      _CrtIsValidHeapPointer 楠岃瘉鏌愪釜鎸囬拡鏄惁鍦ㄦ湰鍦板爢涓紱

      _CrtIsValidPointer 楠岃瘉鎸囧畾鑼冨洿鐨勫唴瀛樻槸鍚﹀彲浠ヨ鍐欙紱

      _CrtIsMemoryBlock 楠岃瘉鏌愪釜鍐呭瓨鍧楁槸鍚﹀湪鏈湴鍫嗕腑銆?/p>

    3. 鍐呭瓨錛堝爢錛夎皟璇曪細(xì)

    malloc_dbg 鍒嗛厤鍐呭瓨鏃朵繚瀛樻湁鍏沖唴瀛樺垎閰嶇殑淇℃伅錛屽鍦ㄤ粈涔堟枃浠躲佸摢涓琛屽垎閰嶇殑鍐呭瓨絳夈傛湁涓緋誨垪鐢ㄦ潵鎻愪緵鍐呭瓨璇婃柇鐨勫嚱鏁幫細(xì)

    _CrtMemCheckpoint 淇濆瓨鍐呭瓨蹇収鍦ㄤ竴涓猒CrtMemState緇撴瀯涓紱

    _CrtMemDifference 姣旇緝涓や釜_CrtMemState錛?/p>

    _CrtMemDumpStatistics 杞偍杈撳嚭涓_CrtMemState緇撴瀯鐨勫唴瀹癸紱

    _CrtMemDumpAllObjectsSince 杈撳嚭涓婃蹇収鎴栫▼搴忓紑濮嬫墽琛屼互鏉ュ湪鍫嗕腑鍒嗛厤鐨勬墍鏈夊璞$殑淇℃伅錛?/p>

    _CrtDumpMemoryLeaks 媯(gè)嫻嬬▼搴忔墽琛屼互鏉ョ殑鍐呭瓨婕忔礊錛屽鏋滄湁婕忔礊鍒欒緭鍑烘墍鏈夊垎閰嶇殑瀵硅薄銆?/p>

    2.聽聽聽聽聽 MFC鎻愪緵鐨勮皟璇曟墜孌?/b>

    MFC鍦–榪愯搴撴彁渚涘拰鏀寔鐨勮皟璇曞姛鑳藉熀紜涓婏紝璁捐浜?jiǎn)涓浜涚被銆佸嚱鏁扮瓑鏉ュ崗鍔╄皟璇曘?/p>

    1. MFC鐨凾RACE銆丄SSERT

      ASSERT

      浣跨敤ASSERT鏂█鍒ゅ畾紼嬪簭鏄惁鍙互緇х畫鎵ц銆?/p>

      TRACE

      浣跨敤TRACE瀹忔樉紺烘垨鑰呮墦鍗拌皟璇曚俊鎭俆RACE鏄氳繃鍑芥暟AfxTrace瀹炵幇鐨勩傜敱浜嶢fxTrace鍑芥暟浣跨敤浜?jiǎn)cdecl璋冪敤綰﹀畾錛屾晠鍙互鎺ュ彈涓暟涓嶅畾鐨勫弬鏁幫紝濡傚悓printf鍑芥暟涓鏍楓傚畠鐨勫畾涔夊拰瀹炵幇濡備笅錛?/p>

      void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...)

      {

      #ifdef _DEBUG // all AfxTrace output is controlled by afxTraceEnabled

      if (!afxTraceEnabled)

      return;

      #endif

      //澶勭悊涓暟涓嶅畾鐨勫弬鏁?/p>

      va_list args;

      va_start(args, lpszFormat);

      int nBuf;

      TCHAR szBuffer[512];

      nBuf = _vstprintf(szBuffer, lpszFormat, args);

      ASSERT(nBuf < _countof(szBuffer));

      if ((afxTraceFlags & traceMultiApp) && (AfxGetApp() != NULL))

      afxDump << AfxGetApp()->m_pszExeName << ": ";

      afxDump << szBuffer;

      va_end(args);

      }

      #endif //_DEBUG

      鍦ㄧ▼搴忔簮鐮佷腑錛屽彲浠ユ帶鍒舵槸鍚︽樉紺鴻窡韙俊鎭紝鏄劇ず浠涔堣窡韙俊鎭傚鏋滃叏灞鍙橀噺afxTraceEnabled涓篢RUE錛屽垯TRACE瀹忓彲浠ヨ緭鍑猴紱鍚﹀垯錛屾病鏈塗RACE淇℃伅琚緭鍑恒傚鏋滈氳繃afxTraceFlags鎸囧畾浜?jiǎn)璺燀t粈涔堟秷鎭紝鍒欒緭鍑烘湁鍏寵窡韙俊鎭紝渚嬪涓轟簡(jiǎn)鎸囧畾鈥淢ultilple Application Debug鈥濓紝浠fxTraceFlags|=traceMultiApp銆傚彲浠ヨ窡韙殑淇℃伅鏈夛細(xì)

      enum AfxTraceFlags

      {

      traceMultiApp = 1, // multi-app debugging

      traceAppMsg = 2, // main message pump trace (includes DDE)

      traceWinMsg = 4, // Windows message tracing

      traceCmdRouting = 8, // Windows command routing trace

      //(set 4+8 for control notifications)

      traceOle = 16, // special OLE callback trace

      traceDatabase = 32, // special database trace

      traceInternet = 64 // special Internet client trace

      };

      榪欐牱錛屽簲鐢ㄧ▼搴忓彲浠ュ湪闇瑕佺殑鍦版柟鎸囧畾afxTraceEnabled鐨勫兼墦寮鎴栬呭叧闂璗RACE寮鍏籌紝鎸囧畾AfxTraceFlags鐨勫艱繃婊よ窡韙俊鎭?/p>

      Visual C++鎻愪緵浜?jiǎn)涓涓猅RACE宸ュ叿錛屼篃鍙互鐢ㄦ潵瀹屾垚涓婅堪鍔熻兘銆?/p>

      涓轟簡(jiǎn)鏄劇ず娑堟伅淇℃伅錛孧FC鍐呴儴瀹氫箟浜?jiǎn)涓涓狝FX_MAP_MESSAG綾誨瀷鐨勬暟緇刟llMessages錛屽偍瀛樹簡(jiǎn)Windows娑堟伅鍜屾秷鎭悕鏄犲皠瀵廣備緥濡傦細(xì)

      allMessages[1].nMsg = WM_CREATE,

      allMessages[1].lpszMsg = 鈥淲M_CREATE鈥?/p>

      MFC鍐呴儴榪樹嬌鐢ㄥ嚱鏁癬AfxTraceMsg鏄劇ず璺熻釜娑堟伅錛屽畠鍙互鎺ユ敹涓涓瓧絎︿覆鍜屼竴涓狹SG鎸囬拡錛岀劧鍚庯紝鎶婅瀛楃涓插拰MSG鐨勫悇涓煙鐨勪俊鎭粍鍚堟垚涓涓ぇ鐨勫瓧絎︿覆騫朵嬌鐢ˋfxTrace鏄劇ず鍑烘潵銆?/p>

      allMessages鍜屽嚱鏁癬AfxTraceMsg鐨勮緇嗗疄鐜板彲浠ュ弬瑙丄fxTrace.cpp銆?/p>

    2. MFC瀵硅薄鍐呭杞偍

      瀵硅薄鍐呭杞偍鏄疌Object綾繪彁渚涚殑鍔熻兘錛屾墍鏈変粠瀹冩淳鐢熺殑綾婚兘鍙互閫氳繃瑕嗙洊铏氭嫙鍑芥暟DUMP鏉ユ敮鎸佽鍔熻兘銆傚湪璁茶堪CObject綾繪椂鏇炬彁鍒拌繃銆?/p>

      铏氭嫙鍑芥暟Dump鐨勫畾涔夛細(xì)

      class ClassName : public CObject

      {

      public:

      #ifdef _DEBUG

      virtual void Dump( CDumpContext& dc ) const;

      #endif

      鈥?/p>

      };

      鍦ㄤ嬌鐢―ump鏃訛紝蹇呴』緇欏畠鎻愪緵涓涓狢DumpContext綾誨瀷鐨勫弬鏁幫紝璇ュ弬鏁版寚瀹氱殑瀵硅薄灝嗚礋璐h緭鍑鴻皟璇曚俊鎭備負(fù)姝わ紝MFC鎻愪緵浜?jiǎn)涓涓瀹氫箟鐨勫叏灞CDumpContext瀵硅薄afxDump錛屽畠鎶婅皟璇曚俊鎭緭閫佺粰璋冭瘯鍣ㄧ殑璋冭瘯紿楀彛銆備粠鍓嶉潰AfxTrace鐨勫疄鐜板彲浠ョ煡閬擄紝MFC浣跨敤浜?jiǎn)afxDump杈撳嚭璺熻釜淇℃伅鍒拌皟璇曠獥鍙c?/p>

      CDumpContext綾繪病鏈夊熀綾伙紝瀹冩彁渚涗簡(jiǎn)浠ユ枃鏈艦寮忚緭鍑鴻瘖鏂俊鎭殑鍔熻兘銆?/p>

      渚嬪錛?/p>

      CPerson* pMyPerson = new CPerson;

      // set some fields of the CPerson object...

      //...

      // now dump the contents

      #ifdef _DEBUG

      pMyPerson->Dump( afxDump );

      #endif

    3. MFC瀵硅薄鏈夋晥鎬ф嫻?

    瀵硅薄鏈夋晥鎬ф嫻嬫槸CObject綾繪彁渚涚殑鍔熻兘錛屾墍鏈変粠瀹冩淳鐢熺殑綾婚兘鍙互閫氳繃瑕嗙洊铏氭嫙鍑芥暟AssertValid鏉ユ敮鎸佽鍔熻兘銆傚湪璁茶堪CObject綾繪椂鏇炬彁鍒拌繃銆?/p>

    铏氭嫙鍑芥暟AssertValid鐨勫畾涔夛細(xì)

    class ClassName : public CObject

    {

    public:

    #ifdef _DEBUG

    virtual void AssertValid( ) const;

    #endif

    鈥?

    };

    浣跨敤ASSERT_VALID瀹忓垽鏂竴涓璞℃槸鍚︽湁鏁堬紝璇ュ璞$殑綾誨繀欏昏鐩栦簡(jiǎn)AssertValid鍑芥暟銆傚艦寮忎負(fù)錛欰SSERT_VALID(pObject)銆?/p>

    鍙﹀錛孧FC鎻愪緵浜?jiǎn)涓浜涘嚱鏁版潵鍒ゆ柇鍦板潃鏄惁鏈夋晥錛屽錛?/p>

    AfxIsMemoryBlock錛孉fxIsString錛孉fxIsValidAddress銆?/p>

    10.1.3鍐呭瓨璇婃柇

    MFC浣跨敤DEBUG_NEW鏉ヨ窡韙唴瀛樺垎閰嶆椂鐨勬墽琛岀殑婧愮爜鏂囦歡鍜岃鏁般?/p>

    鎶?define new DEBUG_NEW鎻掑叆鍒版瘡涓涓簮鏂囦歡涓紝榪欐牱錛岃皟璇曠増鏈氨浣跨敤_malloc_dbg鏉ュ垎閰嶅唴瀛樸侻FC Appwizard鍦ㄥ垱寤烘鏋舵枃浠舵椂宸茬粡浣滀簡(jiǎn)榪欐牱鐨勫鐞嗐?/p>

    1. AfxDoForAllObjects

      MFC鎻愪緵浜?jiǎn)鍑芥暟AfxDoForAllObjects鏉ヨ拷韙姩鎬佸垎閰嶇殑鍐呭瓨瀵硅薄錛屽嚱鏁板師鍨嬪涓嬶細(xì)

      void AfxDoForAllObjects( void (*pfn)(CObject* pObject,

      void* pContext), void* pContext );

      鍏朵腑錛?/p>

      鍙傛暟1鏄竴涓嚱鏁版寚閽堬紝AfxDoForAllObjects瀵規(guī)瘡涓璞¤皟鐢ㄨ鎸囬拡琛ㄧず鐨勫嚱鏁般?/p>

      鍙傛暟2灝嗕紶閫掔粰鍙傛暟1鎸囧畾鐨勫嚱鏁般?/p>

      AfxDoForAllObjects鍙互媯(gè)嫻嬪埌鎵鏈変嬌鐢╪ew鍒嗛厤鐨凜Object瀵硅薄鎴栬匔Object綾繪淳鐢熺殑瀵硅薄錛屼絾鍏ㄥ眬瀵硅薄銆佸祵鍏ュ璞″拰鏍堜腑鍒嗛厤鐨勫璞¢櫎澶栥?/p>

    10.1.4鍐呭瓨婕忔礊媯(gè)嫻?/strong>

    浠呬粎鐢ㄤ簬new鐨凞EBUG鐗堟湰鍒嗛厤鐨勫唴瀛樸?/p>

    瀹屾垚鍐呭瓨婕忔礊媯(gè)嫻嬶紝闇瑕佸涓嬬郴鍒楁楠わ細(xì)

    • 璋冪敤AfxEnableMemoryTracking(TRUE/FALSE)鎵撳紑/鍏抽棴鍐呭瓨璇婃柇銆傚湪璋冭瘯鐗堟湰涓嬶紝緙虹渷鏄墦寮鐨勶紱鍏抽棴鍐呭瓨璇婃柇鍙互鍔犲揩紼嬪簭鎵ц閫熷害錛屽噺灝戣瘖鏂緭鍑恒?

    • 浣跨敤MFC鍏ㄥ眬鍙橀噺afxMemDF鏇寸簿紜湴鎸囧畾璇婃柇杈撳嚭鐨勭壒寰侊紝緙虹渷鍊兼槸allocMemDF錛屽彲浠ュ彇濡備笅鍊兼垨鑰呰繖浜涘肩浉鎴栵細(xì)

    afxMemDF錛宒elayFreeMemDF錛宑heckAlwaysMemDF

    鍏朵腑錛歛llocMemDF琛ㄧず鍙互榪涜鍐呭瓨璇婃柇杈撳嚭錛沝elayFreeMemDF琛ㄧず鏄惁鏄湪搴旂敤紼嬪簭緇撴潫鏃舵墠璋冪敤free鎴栬卍elete錛岃繖鏍峰鑷寸▼搴忔渶澶у彲鑳界殑鍒嗛厤鍐呭瓨錛沜heckAlwaysMemDF琛ㄧず姣忎竴嬈″垎閰嶆垨鑰呴噴鏀懼唴瀛樹箣鍚庨兘璋冪敤鍑芥暟AfxCheckMemory榪涜鍐呭瓨?gòu)個(gè)嫻嬶紙AfxCheckMemory媯(gè)鏌ュ爢涓墍鏈夐氳繃new鍒嗛厤鐨勫唴瀛橈紙涓嶅惈malloc錛夛級(jí)銆?/p>

    榪欎竴姝ユ槸鍙夋楠わ紝闈炲繀欏匯?/p>

    • 鍒涘緩涓涓狢MemState綾誨瀷鐨勫彉閲弌ldMemState錛岃皟鐢–MemState鐨勬垚鍛樺嚱鏁癈heckPoint鑾峰緱鍒濇鍐呭瓨蹇収銆?

    • 鎵ц浜?jiǎn)绯诲垪鍐呭瓨鍒嗛厤鎴栬呴噴鏀句箣鍚庯紝鍒涘緩鍙︿竴涓狢MemState綾誨瀷鍙橀噺newMemState錛岃皟鐢–MemState鐨勬垚鍛樺嚱鏁癈heckPoint鑾峰緱鏂扮殑鍐呭瓨蹇収銆?

    • 鍒涘緩絎笁涓狢MemState綾誨瀷鍙橀噺difMemState錛岃皟鐢–MemState鐨勬垚鍛樺嚱鏁癉ifference姣旇緝oldMemState鍜宯ewMemState錛岀粨鏋滀繚瀛樺湪鍙橀噺difMemState涓傚鏋滄病鏈変笉鍚岋紝鍒欒繑鍥濬ALSE錛屽惁鍒欒繑鍥濼RUE銆?

    • 濡傛灉涓嶅悓錛屽垯璋冪敤鎴愬憳鍑芥暟DumpStatistics杈撳嚭姣旇緝緇撴灉銆?

    渚嬪錛?/p>

    // Declare the variables needed

    #ifdef _DEBUG

    CMemoryState oldMemState, newMemState, diffMemState;

    oldMemState.Checkpoint();

    #endif

    // do your memory allocations and deallocations...

    CString s = "This is a frame variable";

    // the next object is a heap object

    CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );

    #ifdef _DEBUG

    newMemState.Checkpoint();

    if( diffMemState.Difference( oldMemState, newMemState ) )

    {

    TRACE( "Memory leaked!\n" );

    diffMemState.DumpStatistics();

    //or diffMemState.DumpAllObjectsSince();

    }

    #endif

    MFC鍦ㄥ簲鐢ㄧ▼搴忥紙璋冭瘯鐗堬級(jí)緇撴潫鏃訛紝鑷姩榪涜鍐呭瓨婕忔礊媯(gè)嫻嬶紝濡傛灉瀛樺湪婕忔礊錛屽垯杈撳嚭婕忔礊鐨勬湁鍏充俊鎭?/p>



]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲激情一区| 亚洲在线成人精品| 亚洲免费观看高清完整版在线观看熊| 亚洲影音先锋| 亚洲狼人精品一区二区三区| 亚洲九九爱视频| 正在播放亚洲一区| 亚洲国产福利在线| 国产精品亚洲综合久久| 一区二区三区视频观看| 欧美成人一区二区三区片免费| 一区二区激情| 欧美二区乱c少妇| 欧美va天堂在线| 91久久久一线二线三线品牌| 久久久久久久综合狠狠综合| 亚洲成色www8888| 久久手机精品视频| 激情国产一区二区| 亚洲欧洲在线播放| 欧美呦呦网站| 亚洲国产精品一区二区久 | 欧美国产欧美综合 | 午夜精品免费视频| 在线观看一区二区视频| 老司机aⅴ在线精品导航| 久久久久久久久久久久久女国产乱| 国内在线观看一区二区三区| 免费亚洲一区二区| 一区二区三区高清| 亚洲日韩欧美一区二区在线| 欧美成人精品1314www| 亚洲网友自拍| 日韩视频在线观看| 国产精品嫩草99a| 亚洲第一黄色网| 国产精品女人久久久久久| 久久久久网址| 欧美日韩国产一区二区| 久久综合九九| 国产精品高潮呻吟久久| 亚洲欧洲一区二区在线播放| 亚洲制服欧美中文字幕中文字幕| 国产亚洲在线| 亚洲欧美视频在线观看视频| 欧美精品18videos性欧美| 欧美日韩国产限制| 亚洲高清av| 欧美电影打屁股sp| 欧美在线亚洲一区| 国产精品永久免费在线| 夜夜嗨网站十八久久| 久久成人国产| 国产精品亚洲综合一区在线观看| 91久久精品日日躁夜夜躁欧美 | 免费毛片一区二区三区久久久| 久久一区二区三区av| 欧美一区二区免费观在线| 国产欧美丝祙| 美日韩精品免费| 国产欧美1区2区3区| 欧美va天堂va视频va在线| 中文一区二区在线观看| 国产精品大全| 久久成人精品视频| 久久久美女艺术照精彩视频福利播放| 99国产精品| 亚洲小少妇裸体bbw| 欧美一级片在线播放| 亚洲在线一区二区| 国产欧美视频一区二区三区| 欧美一级在线视频| 久久精品91久久香蕉加勒比| 91久久国产综合久久| 亚洲精品男同| 国产精品久久中文| 美国十次了思思久久精品导航| 美女日韩欧美| 亚洲欧美日本视频在线观看| 久久精品国产在热久久| 99在线精品视频在线观看| 亚洲欧美一区二区原创| 亚洲二区三区四区| 久久精品视频在线免费观看| 亚洲午夜电影在线观看| 久久久人成影片一区二区三区| 亚洲视频一二区| 久久午夜精品| 久久电影一区| 国产精品久久久久久久久久免费 | 亚洲欧美日韩综合| 久久国产欧美日韩精品| 亚洲最新色图| 另类专区欧美制服同性| 欧美在线日韩精品| 欧美日韩福利视频| 欧美插天视频在线播放| 国产精品亚发布| 日韩视频免费看| 国产伦精品一区二区三区照片91 | 一区二区福利| 久久久久久有精品国产| 亚洲欧美日韩直播| 噜噜噜躁狠狠躁狠狠精品视频| 欧美在线观看视频一区二区| 久久夜色精品国产噜噜av| 欧美福利电影在线观看| 一区二区三区日韩精品| 欲色影视综合吧| 国产精品久久久91| 欧美精品一区二区在线观看| 久久精品国产一区二区电影| 亚洲色在线视频| 亚洲国产精品国自产拍av秋霞| 午夜精品福利在线观看| 亚洲三级色网| 久久久久久久综合色一本| 久久国产成人| 国产欧美69| 亚洲欧美另类久久久精品2019| 亚洲尤物在线视频观看| 欧美三级中文字幕在线观看| 亚洲乱亚洲高清| 日韩午夜精品视频| 欧美另类女人| 亚洲乱亚洲高清| 狠狠色丁香久久综合频道| 久久国产精品黑丝| 欧美va天堂在线| 91久久久一线二线三线品牌| 欧美xx69| 亚洲人午夜精品免费| 中文在线不卡| 国产精品五月天| 欧美在线高清视频| 免费一区视频| 一区二区欧美精品| 国产精品日韩欧美综合| 午夜精品久久久久久久白皮肤| 久久人人97超碰精品888| 亚洲第一黄网| 欧美日韩一区二区三区四区在线观看| 91久久精品日日躁夜夜躁国产| 一区二区高清| 国产精品午夜av在线| 欧美亚洲一区二区三区| 欧美fxxxxxx另类| 日韩视频在线一区二区三区| 欧美视频在线观看| 久久精品日产第一区二区| 亚洲国产欧美国产综合一区 | 亚洲一区二区三区四区中文| 国产精品久久激情| 欧美在线黄色| 亚洲成色www久久网站| 亚洲专区免费| 在线日韩视频| 国产精品草莓在线免费观看| 久久成人亚洲| 亚洲毛片网站| 麻豆国产精品va在线观看不卡 | 伊人蜜桃色噜噜激情综合| 欧美1区视频| 亚洲欧美一区二区三区久久| 欧美 日韩 国产精品免费观看| 亚洲最新中文字幕| 狠狠色丁香久久婷婷综合丁香| 久久在线精品| 性娇小13――14欧美| 亚洲国产美女| 欧美精品一区视频| 亚洲欧美在线x视频| 夜夜狂射影院欧美极品| 国产精品尤物| 久久国产精品72免费观看| 亚洲欧美另类在线观看| 欧美乱妇高清无乱码| 久久riav二区三区| 在线观看欧美精品| 欧美日韩成人一区二区| 久久久欧美精品| 久久青草久久| 久久影视精品| 欧美高清在线| 蜜臀久久99精品久久久久久9| 久久久在线视频| 久久久亚洲国产天美传媒修理工 | 欧美天堂亚洲电影院在线播放 | 国产有码一区二区| 国产欧美一区二区三区在线老狼| 国产精品白丝jk黑袜喷水| 欧美色123| 国产精品久久久久一区二区| 国产精品亚洲视频| 国产一区91精品张津瑜| 精品91在线| 亚洲欧洲另类| 亚洲一二三区精品| 欧美中文字幕视频在线观看| 久久夜色精品国产|