锘??xml version="1.0" encoding="utf-8" standalone="yes"?> Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=455591 鍦╓inMain鍑芥暟琚墽琛屼箣鍓嶏紝鏈変竴緋誨垪澶嶆潅鐨勫姞杞藉姩浣滐紝榪樿鎵ц涓澶ф鍚姩浠g爜銆傝繍琛岀▼搴廙yApp.exe鏃訛紝鎿嶄綔緋葷粺鐨勫姞杞界▼搴忛鍏堜負榪涚▼鍒嗛厤涓涓?GB鐨勮櫄鎷熷湴鍧絀洪棿錛岀劧鍚庢妸紼嬪簭MyApp.exe鎵鍗犵敤鐨勭鐩樼┖闂翠綔涓鴻櫄鎷熷唴瀛樻槧灝勫埌榪欎釜4GB鐨勮櫄鎷熷湴鍧絀洪棿涓備竴鑸儏鍐典笅錛屼細鏄犲皠鍒拌櫄鎷熷湴鍧絀洪棿涓?X00400000鐨勪綅緗傚姞杞戒竴涓簲鐢ㄧ▼搴忕殑鏃墮棿姣斾竴鑸漢鎵璁炬兂鐨勮灝戯紝鍥犱負鍔犺澆涓涓狿E鏂囦歡騫朵笉鏄妸榪欎釜鏂囦歡鏁翠釜涓嬈℃х殑浠庣鐩樿鍒板唴瀛樹腑錛岃屾槸綆鍗曠殑鍋氫竴涓唴瀛樻槧灝勶紝鏄犲皠涓涓ぇ鏂囦歡鍜屾槧灝勪竴涓皬鏂囦歡鎵鑺辮垂鐨勬椂闂寸浉宸棤鍑犮傚綋鐒訛紝鐪熸鎵ц鏂囦歡涓殑浠g爜鏃訛紝鎿嶄綔緋葷粺榪樻槸瑕佹妸瀛樺湪浜庣鐩樹笂鐨勮櫄鎷熷唴瀛樹腑鐨勪唬鐮佷氦鎹㈠埌鐗╃悊鍐呭瓨(RAM)涓備絾鏄紝榪欑浜ゆ崲涔熶笉鏄妸鏁翠釜鏂囦歡鎵鍗犵敤鐨勮櫄鎷熷湴鍧絀洪棿涓嬈℃х殑鍏ㄩ儴浠庣鐩樹氦鎹㈠埌鐗╃悊鍐呭瓨涓紝鎿嶄綔緋葷粺浼氭牴鎹渶瑕佸拰鍐呭瓨鍗犵敤鎯呭喌浜ゆ崲涓欏墊垨澶氶〉銆傚綋鐒訛紝榪欑浜ゆ崲鏄弻鍚戠殑錛屽嵆瀛樺湪浜庣墿鐞嗗唴瀛樹腑鐨勪竴閮ㄥ垎褰撳墠娌℃湁琚嬌鐢ㄧ殑欏典篃鍙兘琚氦鎹㈠埌紓佺洏涓?/p>
鎺ョ潃錛岀郴緇熷湪鍐呮牳涓垱寤鴻繘紼嬪璞″拰涓葷嚎紼嬪璞′互鍙婂叾瀹冨唴瀹廣?/p>
鐒跺悗鎿嶄綔緋葷粺鐨勫姞杞界▼搴忔悳绱E鏂囦歡涓殑寮曞叆琛紝鍔犺澆鎵鏈夊簲鐢ㄧ▼搴忔墍浣跨敤鐨勫姩鎬侀摼鎺ュ簱銆傚鍔ㄦ侀摼鎺ュ簱鐨勫姞杞戒笌瀵瑰簲鐢ㄧ▼搴忕殑鍔犺澆瀹屽叏綾諱技銆?/p>
鍐嶆帴鐫錛屾搷浣滅郴緇熸墽琛孭E鏂囦歡棣栭儴鎵鎸囧畾鍦板潃澶勭殑浠g爜錛屽紑濮嬪簲鐢ㄧ▼搴忎富綰跨▼鐨勬墽琛屻傞鍏堣鎵ц鐨勪唬鐮佸茍涓嶆槸MyApp涓殑WinMain鍑芥暟錛岃屾槸琚О涓篊 Runtime startup code鐨刉inMainCRTStartup鍑芥暟錛岃鍑芥暟鏄繛鎺ユ椂鐢辮繛鎺ョ▼搴忛檮鍔犲埌鏂囦歡MyApp.exe涓殑銆傝鍑芥暟寰楀埌鏂拌繘紼嬬殑鍏ㄩ儴鍛戒護琛屾寚閽堝拰鐜鍙橀噺鐨勬寚閽堬紝瀹屾垚涓浜汣榪愯鏃跺叏灞鍙橀噺浠ュ強C榪愯鏃跺唴瀛樺垎閰嶅嚱鏁扮殑鍒濆鍖栧伐浣溿傚鏋滀嬌鐢–++緙栫▼錛岃繕瑕佹墽琛屽叏灞綾誨璞$殑鏋勯犲嚱鏁般傛渶鍚庯紝WinMainCRTStartup鍑芥暟璋冪敤WinMain鍑芥暟銆?/p>
WinMainCRTStartup鍑芥暟浼犵粰WinMain鍑芥暟鐨?涓弬鏁板垎鍒負錛歨Instance銆乭PrevInstance銆乴pCmdline銆乶CmdShow銆?/p>
hInstance錛氳榪涚▼鎵瀵瑰簲鐨勫簲鐢ㄧ▼搴忓綋鍓嶅疄渚嬬殑鍙ユ焺銆俉inMainCRTStartup鍑芥暟閫氳繃璋冪敤GetStartupInfo鍑芥暟鑾峰緱璇ュ弬鏁扮殑鍊箋傝鍙傛暟瀹為檯涓婃槸搴旂敤紼嬪簭琚姞杞藉埌榪涚▼铏氭嫙鍦板潃絀洪棿鐨勫湴鍧錛岄氬父鎯呭喌涓嬶紝瀵逛簬澶у鏁拌繘紼嬶紝璇ュ弬鏁版繪槸0X00400000銆?/p>
hPrevInstance錛氬簲鐢ㄧ▼搴忓墠涓瀹炰緥鐨勫彞鏌勩傜敱浜嶹in32搴旂敤紼嬪簭鐨勬瘡涓涓疄渚嬫繪槸榪愯鍦ㄨ嚜宸辯殑鐙珛鐨勮繘紼嬪湴鍧絀洪棿涓紝鍥犳錛屽浜嶹in32搴旂敤紼嬪簭錛學inMainCRTStartup鍑芥暟浼犵粰璇ュ弬鏁扮殑鍊兼繪槸NULL銆傚鏋滃簲鐢ㄧ▼搴忓笇鏈涚煡閬撴槸鍚︽湁鍙︿竴涓疄渚嬪湪榪愯錛屽彲浠ラ氳繃綰跨▼鍚屾鎶鏈紝鍒涘緩涓涓叿鏈夊敮涓鍚嶇О鐨勪簰鏂ラ噺錛岄氳繃媯嫻嬭繖涓簰鏂ラ噺鏄惁瀛樺湪鍙互鐭ラ亾鏄惁鏈夊彟涓涓疄渚嬪湪榪愯銆?/p>
lpCmdline錛氬懡浠よ鍙傛暟鐨勬寚閽堛傝鎸囬拡鎸囧悜涓涓互0緇撳熬鐨勫瓧絎︿覆錛岃瀛楃涓蹭笉鍖呮嫭搴旂敤紼嬪簭鍚嶃?/p>
nCmdShow錛氭寚瀹氬浣曟樉紺哄簲鐢ㄧ▼搴忕獥鍙c傚鏋滆紼嬪簭閫氳繃鍦ㄨ祫婧愮鐞嗗櫒涓弻鍑誨浘鏍囪繍琛岋紝WinMainCRTStartup鍑芥暟浼犵粰璇ュ弬鏁扮殑鍊間負SW_SHOWNORMAL銆傚鏋滈氳繃鍦ㄥ彟涓涓簲鐢ㄧ▼搴忎腑璋冪敤CreatProcess鍑芥暟榪愯錛岃鍙傛暟鐢盋reatProcess鍑芥暟鐨勫弬鏁發pStartupInfo(STARTUPINFO.wShowWindow)鎸囧畾銆?/p>
璁炬湁涓涓猈in32涓嬬殑鍙墽琛屾枃浠禡yApp.exe錛岃繖鏄竴涓猈in32搴旂敤紼嬪簭錛岀鍚堟爣鍑嗙殑PE鏍煎紡銆侻yApp.exe鐨勪富瑕佹墽琛屼唬鐮侀兘闆嗕腑鍦ㄥ叾婧愭枃浠禡yApp.cpp涓紝璇ユ枃浠剁涓涓鎵ц鐨勫嚱鏁版槸WinMain銆傚垵瀛﹁呬細璁や負紼嬪簭灝辨槸棣栧厛浠庤繖涓猈inMain鍑芥暟寮濮嬫墽琛岋紝鍏跺疄涓嶇劧銆?
]]>
1. 棣栧厛璇翠笅緙栬瘧鍣ㄧ紪璇戝嚱鏁版椂錛屽鍑芥暟鍚嶇殑澶勭悊銆?br> 鍦–璇█涓紝瀵瑰嚱鏁板: IRoleView* RoleViewCreate(int nType); 緙栬瘧鍚庣敓鎴愮殑鍑芥暟鍚嶆槸RoleViewCreate
浣嗘槸鍦–++涓紝鐢變簬瀛樺湪鍑芥暟閲嶈澆鐨勭壒鎬э紝鎵浠ョ紪璇戞椂C++緙栬瘧鍣ㄤ細鏍規嵁鍙傛暟銆佽繑鍥炲肩瓑淇℃伅瀵瑰嚱鏁板悕鏀圭紪錛屽涓婇潰鍑芥暟鍦–++緙栬瘧鍣ㄤ腑鐢熸垚鐨勫嚱鏁板悕鏄??RoleViewCreate@@YAPAVIRoleView@@H@z
2. extern "C"鐨勫惈涔夈?br> extern "C" 鏈変袱閲嶅惈涔夛細
鍏朵竴錛岃淇グ鐨勫彉閲忔垨鍑芥暟鏄痚xtern鐨勫瓨鍌ㄧ被鍨嬶紝瀹冨憡璇夌紪璇戝櫒錛屽叾澹版槑鐨勫彉閲忔垨鍑芥暟鍙互琚湰妯″潡鍜屽閮ㄦ煇鍧椾嬌鐢ㄣ?br> 鍏朵簩錛岃鍏朵慨楗扮殑鍑芥暟鎴栧彉閲忔槸鎸夌収C璇█鐨勬柟寮忔潵緙栬瘧鍜岄摼鎺ョ殑銆?br> 娉ㄦ剰錛宔xtern "C"鍐欐硶 鍙湪C++涓鏀寔錛孋璇█涓嶆敮鎸佽鍐欐硶銆?br>
3. extern "C"鐨勪袱縐嶆儻鐢ㄧ敤娉曪細
a) 鍦–++涓嬌鐢–璇█鐨勫嚱鏁版垨鍙橀噺錛屽湪鍖呭惈C璇█鎻愪緵鐨勫ご鏂囦歡鏄紝闇瑕佺敤 extern "C" { } 鏉ュ寘鍚ご鏂囦歡銆傚涓嬶細
extern "C"
{
#include "lua.h" //lua.h鏄疌緙栧啓錛屽茍鎻愪緵鐨勫ご鏂囦歡
}
榪欓噷寮曠敤涓嬬1鐐圭殑鍑芥暟鏉ヨ鏄庝笂榪板啓娉曠殑鐢ㄩ旓細鍋囪lua.h涓寘鍚嚱鏁?IRoleView* RoleViewCreate(int nType), 閭d箞C璇█鐨勭紪璇戞椂鐢熸垚鐨勫嚱鏁板悕鏄疪oleViewCreate錛岃屽綋C++瀹㈡埛紼嬪簭鍘諱嬌鐢ㄥ畠鏃訛紝榛樿鏄寜C++鐨勯摼鎺ユ柟寮忥紙鍗充笉鍔犱互涓婄殑 extern "C"鏃訛級錛屾墍浠++瀹㈡埛紼嬪簭浼氬幓澶栭儴妯″潡涓煡鎵懼嚱鏁板悕涓?br>?RoleViewCreate@@YAPAVIRoleView@@H@z鐨勫嚱鏁幫紝榪欐牱C++緙栬瘧鍣ㄤ細鎵句笉鍒拌鍑芥暟錛屾姤鍑?鏃犳硶瑙f瀽鐨勫閮ㄦ爣璇嗙"鐨勯敊璇紱 鑰屽綋鍔犱笂
extern "C" { } 鏃訛紝瀹冨氨鍛婅瘔緙栬瘧鍣ㄥご鏂囦歡涓寘鍚殑鍑芥暟鎴栧彉閲忚鎸夌収C璇█鐨勭紪璇戦摼鎺ユ柟寮忚繘琛岋紝鎵浠++緙栬瘧鍣ㄤ細鍘誨閮ㄦā鍧楁煡鎵懼嚱鏁板悕涓?br>RoleViewCreate鐨勫嚱鏁幫紝浠庤屽緱鍒版紜粨鏋溿?br>
b) 鍦–涓皟鐢ㄤ竴涓狢++璇█涓殑鍑芥暟鎴栧彉閲忔椂錛孋++鐨勫ご鏂囦歡闇瑕佹坊鍔?extern "C"錛岃繖鏄負浜嗚緙栬瘧鍣ㄥ鍑芥暟鎴栧彉閲忔寜C璇█鐨勬柟寮忚繘琛岀紪璇戯紝宸蹭緵C璇█璋冪敤錛?浣嗗湪C璇█涓紝涓嶈兘鐩存帴鍖呭惈澹版槑浜唀xtern "C"鐨勫ご鏂囦歡錛岃屽簲璇ュ湪C鏂囦歡涓妸鍦–++澶存枃浠朵腑瀹氫箟鐨勫嚱鏁幫紝澹版槑涓?extern綾誨瀷錛屽洜涓哄湪C璇█涓紝騫朵笉鏀寔extern "C"鐨勫啓娉曪紱
鍙傝冭祫鏂欙細銆奀++涓璭xtern "C" 鍚箟娣卞眰鎺㈢儲銆嬩綔鑰咃細瀹嬪疂鍗?br> 銆奀++ Primer銆?br>
]]>