锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜精品在线,老司机午夜精品视频,欧美不卡视频http://m.shnenglu.com/amyvmiwei/category/5910.html 鎴樿儨鑷繁灝辨槸鎴樿儨涓鍒? zh-cnTue, 20 May 2008 00:05:01 GMTTue, 20 May 2008 00:05:01 GMT60DLL 涓?.def鏂囦歡鐨勪嬌鐢?/title><link>http://m.shnenglu.com/amyvmiwei/archive/2008/01/02/40203.html</link><dc:creator>灝忎笉鐐?/dc:creator><author>灝忎笉鐐?/author><pubDate>Tue, 01 Jan 2008 21:37:00 GMT</pubDate><guid>http://m.shnenglu.com/amyvmiwei/archive/2008/01/02/40203.html</guid><wfw:comment>http://m.shnenglu.com/amyvmiwei/comments/40203.html</wfw:comment><comments>http://m.shnenglu.com/amyvmiwei/archive/2008/01/02/40203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/amyvmiwei/comments/commentRss/40203.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/amyvmiwei/services/trackbacks/40203.html</trackback:ping><description><![CDATA[<p>           DLL涓鍑哄嚱鏁扮殑澹版槑鏈変袱縐嶆柟寮忥細涓縐嶄負鍦ㄥ嚱鏁板0鏄庝腑鍔犱笂__declspec(dllexport)錛岃繖閲屼笉鍐嶄婦渚嬭鏄庯紱鍙﹀涓縐嶆柟寮忔槸閲囩敤妯″潡瀹氫箟(.def) 鏂囦歡澹版槑錛?def鏂囦歡涓洪摼鎺ュ櫒鎻愪緵浜嗘湁鍏寵閾炬帴紼嬪簭鐨勫鍑恒佸睘鎬у強鍏朵粬鏂歸潰鐨勪俊鎭?br><br><br>            棣栧厛鍒涘緩 涓涓狣LL紼嬪簭錛?cpp涓?br>int __stdcall Add(int numa, int numb)<br>{<br>       return (numa + numb);<br>}</p> <p>int __stdcall Sub(int numa, int numb)<br>{<br>        return (numa - numb);<br>}<br><br>             鐒跺悗鍒涘緩涓涓?def鐨勬枃浠訛紝鍦ㄩ噷闈㈠姞涓?br></p> <p class=code>;DllTestDef.lib : 瀵煎嚭DLL鍑芥暟<br>;浣滆咃細----<br>LIBRARY DllTestDef<br>EXPORTS <br>Add @ 1<br>Sub @ 2<br><br>           鏈鍚庡垱寤轟竴涓祴璇曠▼搴忥細.cpp鏂囦歡濡備笅錛?br>#include <iostream><br>#include <windows.h></p> <p class=code>using namespace std;</p> <p class=code>typedef int (__stdcall *FUN)(int, int);<br>HINSTANCE hInstance;<br>FUN   fun;</p> <p class=code>int main()<br>{<br>       hInstance = LoadLibrary("DLLTestDef.dll");<br>       if(!hInstance)<br>           cout << "Not Find this Dll" << endl;<br>       fun = (FUN)GetProcAddress(hInstance, MAKEINTRESOURCE(1));<br>       if (!fun)<br>       {<br>              cout << "not find this fun" << endl;<br>       }<br>       cout << fun(1, 2) << endl;<br>       FreeLibrary(hInstance);<br>       return 0;<br>}</p> <br><br>璇存槑錛?br>.def鏂囦歡鐨勮鍒欎負錛?br><br>銆銆(1)LIBRARY璇彞璇存槑.def鏂囦歡鐩稿簲鐨凞LL錛?br><br>銆銆(2)EXPORTS璇彞鍚庡垪鍑鴻瀵煎嚭鍑芥暟鐨勫悕縐般傚彲浠ュ湪.def鏂囦歡涓殑瀵煎嚭鍑芥暟鍚嶅悗鍔燖n錛岃〃紺鴻瀵煎嚭鍑芥暟鐨勫簭鍙蜂負n錛堝湪榪涜鍑芥暟璋冪敤鏃訛紝榪欎釜搴忓彿灝嗗彂鎸ュ叾浣滅敤錛夛紱<br><br>銆銆(3).def 鏂囦歡涓殑娉ㄩ噴鐢辨瘡涓敞閲婅寮濮嬪鐨勫垎鍙?(;) 鎸囧畾錛屼笖娉ㄩ噴涓嶈兘涓庤鍙ュ叡浜竴琛屻?br><br> <img src ="http://m.shnenglu.com/amyvmiwei/aggbug/40203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/amyvmiwei/" target="_blank">灝忎笉鐐?/a> 2008-01-02 05:37 <a href="http://m.shnenglu.com/amyvmiwei/archive/2008/01/02/40203.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>DLL 璋冪敤鏂瑰紡http://m.shnenglu.com/amyvmiwei/archive/2008/01/02/40202.html灝忎笉鐐?/dc:creator>灝忎笉鐐?/author>Tue, 01 Jan 2008 21:24:00 GMThttp://m.shnenglu.com/amyvmiwei/archive/2008/01/02/40202.htmlhttp://m.shnenglu.com/amyvmiwei/comments/40202.htmlhttp://m.shnenglu.com/amyvmiwei/archive/2008/01/02/40202.html#Feedback0http://m.shnenglu.com/amyvmiwei/comments/commentRss/40202.htmlhttp://m.shnenglu.com/amyvmiwei/services/trackbacks/40202.htmlDLL(鍔ㄦ佽繛鎺ュ簱)錛岀劧鑰屽彲浠ュ垎涓哄姩鎬佽皟鐢ㄤ簬闈欐佽皟鐢ㄣ備笅闈㈡垜鍒嗗埆涓句竴涓緥瀛愯璇淬?br>
1錛夊姩鎬佽皟鐢細
棣栧厛錛氬湪VC++6.0涓垱寤?Win32 Dynamic-link library宸ョ▼鍒涘緩涓涓姩鎬佽繛鎺ュ簱宸ョ▼錛?br>            鍦ㄥご鏂囦歡TestDll.h涓啓涓嬩唬鐮?br>            extern "C" int __declspec(dllexport) add(int numa, int numb);
            鍦ㄦ簮鏂囦歡TestDll.cpp涓疄鐜版敼鍑芥暟錛?br>            int __declspec(dllexport) add(int numa, int numb)
            {
                      return numa + numb;
            }
鍏舵錛屽垱寤轟竴涓祴璇曠▼搴忥紝TestDemo錛屽垱寤轟竴涓?cpp鏂囦歡錛岀劧鍚庢斁涓嬩唬鐮侊細
HINSTANCE hinstance;

typedef int (*lpAdd)(int a, int b);


lpAdd lpadd;

int main()
{
          hinstance = LoadLibrary("E:\\vc\\DLL\\TestDll\\Debug\\TestDll.dll");
          lpadd = (lpAdd)GetProcAddress(hinstance, "add");
          cout << "2 + 3 = " << lpadd(2, 3) << endl;
          FreeLibrary(hinstance);
          return 0;
}
鑰屽簲鐢ㄧ▼搴忓鏈珼LL鐨勮皟鐢ㄥ拰瀵圭2鑺傞潤鎬侀摼鎺ュ簱鐨勮皟鐢ㄥ嵈鏈夎緝澶у樊寮傦紝涓嬮潰鎴戜滑鏉ラ愪竴鍒嗘瀽銆?/p>

銆銆棣栧厛錛岃鍙ypedef int ( * lpAddFun)(int,int)瀹氫箟浜嗕竴涓笌add鍑芥暟鎺ュ彈鍙傛暟綾誨瀷鍜岃繑鍥炲煎潎鐩稿悓鐨勫嚱鏁版寚閽堢被鍨嬨傞殢鍚庯紝鍦╩ain鍑芥暟涓畾涔変簡lpAddFun鐨勫疄渚媋ddFun錛?/p>

  銆銆鍏舵錛屽湪鍑芥暟main涓畾涔変簡涓涓狣LL HINSTANCE鍙ユ焺瀹炰緥hDll錛岄氳繃Win32 Api鍑芥暟LoadLibrary鍔ㄦ佸姞杞戒簡DLL妯″潡騫跺皢DLL妯″潡鍙ユ焺璧嬬粰浜唄Dll錛?/p>

 銆銆鍐嶆錛屽湪鍑芥暟main涓氳繃Win32 Api鍑芥暟GetProcAddress寰楀埌浜嗘墍鍔犺澆DLL妯″潡涓嚱鏁癮dd鐨勫湴鍧騫惰祴緇欎簡addFun銆傜粡鐢卞嚱鏁版寚閽坅ddFun榪涜浜嗗DLL涓璦dd鍑芥暟鐨勮皟鐢紱

   銆銆鏈鍚庯紝搴旂敤宸ョ▼浣跨敤瀹孌LL鍚庯紝鍦ㄥ嚱鏁癿ain涓氳繃Win32 Api鍑芥暟FreeLibrary閲婃斁浜嗗凡緇忓姞杞界殑DLL妯″潡銆?/p>

  銆銆閫氳繃榪欎釜綆鍗曠殑渚嬪瓙錛屾垜浠幏鐭LL瀹氫箟鍜岃皟鐢ㄧ殑涓鑸蹇碉細

    銆銆(1)DLL涓渶浠ユ煇縐嶇壒瀹氱殑鏂瑰紡澹版槑瀵煎嚭鍑芥暟錛堟垨鍙橀噺銆佺被錛夛紱

   銆銆(2)搴旂敤宸ョ▼闇浠ユ煇縐嶇壒瀹氱殑鏂瑰紡璋冪敤DLL鐨勫鍑哄嚱鏁幫紙鎴栧彉閲忋佺被錛夈?br>

2錛夐潤鎬佽繛鎺ワ細
浠g爜濡備笅錛?br>#include <iostream>
using namespace std;

#pragma comment(lib,"Testlib.lib")

//.lib鏂囦歡涓粎浠呮槸鍏充簬鍏跺搴擠LL鏂囦歡涓嚱鏁扮殑閲嶅畾浣嶄俊鎭?br>extern "C" __declspec(dllimport) add(int x,int y);

int main()
{
         int result = add(2,3); 
         cout <<銆result <錛溿endl;
         return 0;
}

         



]]>
(杞?璁哄嚱鏁拌皟鐢ㄧ害瀹?/title><link>http://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40169.html</link><dc:creator>灝忎笉鐐?/dc:creator><author>灝忎笉鐐?/author><pubDate>Tue, 01 Jan 2008 07:33:00 GMT</pubDate><guid>http://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40169.html</guid><wfw:comment>http://m.shnenglu.com/amyvmiwei/comments/40169.html</wfw:comment><comments>http://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/amyvmiwei/comments/commentRss/40169.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/amyvmiwei/services/trackbacks/40169.html</trackback:ping><description><![CDATA[鍋囪鎴戜滑鏈夎繖鏍風殑涓涓嚱鏁幫細 <p align=center><strong>int function(int a,int b)</strong></p> <p>璋冪敤鏃跺彧瑕佺敤result = function(1,2)榪欐牱鐨勬柟寮忓氨鍙互浣跨敤榪欎釜鍑芥暟銆備絾鏄紝褰撻珮綰ц璦琚紪璇戞垚璁$畻鏈哄彲浠ヨ瘑鍒殑鏈哄櫒鐮佹椂錛屾湁涓涓棶棰樺氨鍑哥幇鍑烘潵錛氬湪CPU涓紝璁$畻鏈烘病鏈夊姙娉曠煡閬撲竴涓嚱鏁拌皟鐢ㄩ渶瑕佸灝戜釜銆佷粈涔堟牱鐨勫弬鏁幫紝涔熸病鏈夌‖浠跺彲浠ヤ繚瀛樿繖浜涘弬鏁般備篃灝辨槸璇達紝璁$畻鏈轟笉鐭ラ亾鎬庝箞緇欒繖涓嚱鏁頒紶閫掑弬鏁幫紝浼犻掑弬鏁扮殑宸ヤ綔蹇呴』鐢卞嚱鏁拌皟鐢ㄨ呭拰鍑芥暟鏈韓鏉ュ崗璋冦備負姝わ紝璁$畻鏈烘彁渚涗簡涓縐嶈縐頒負鏍堢殑鏁版嵁緇撴瀯鏉ユ敮鎸佸弬鏁頒紶閫掋?/p> <p>鏍堟槸涓縐嶅厛榪涘悗鍑虹殑鏁版嵁緇撴瀯錛屾爤鏈変竴涓瓨鍌ㄥ尯銆佷竴涓爤欏舵寚閽堛傛爤欏舵寚閽堟寚鍚戝爢鏍堜腑絎竴涓彲鐢ㄧ殑鏁版嵁欏癸紙琚О涓烘爤欏訛級銆傜敤鎴峰彲浠ュ湪鏍堥《涓婃柟鍚戞爤涓姞鍏ユ暟鎹紝榪欎釜鎿嶄綔琚О涓哄帇鏍?Push)錛屽帇鏍堜互鍚庯紝鏍堥《鑷姩鍙樻垚鏂板姞鍏ユ暟鎹」鐨勪綅緗紝鏍堥《鎸囬拡涔熼殢涔嬩慨鏀廣傜敤鎴蜂篃鍙互浠庡爢鏍堜腑鍙栬蛋鏍堥《錛岀О涓哄脊鍑烘爤(pop)錛屽脊鍑烘爤鍚庯紝鏍堥《涓嬬殑涓涓厓绱犲彉鎴愭爤欏訛紝鏍堥《鎸囬拡闅忎箣淇敼銆?/p> <p>鍑芥暟璋冪敤鏃訛紝璋冪敤鑰呬緷嬈℃妸鍙傛暟鍘嬫爤錛岀劧鍚庤皟鐢ㄥ嚱鏁幫紝鍑芥暟琚皟鐢ㄤ互鍚庯紝鍦ㄥ爢鏍堜腑鍙栧緱鏁版嵁錛屽茍榪涜璁$畻銆傚嚱鏁拌綆楃粨鏉熶互鍚庯紝鎴栬呰皟鐢ㄨ呫佹垨鑰呭嚱鏁版湰韜慨鏀瑰爢鏍堬紝浣垮爢鏍堟仮澶嶅師瑁呫?/p> <p>鍦ㄥ弬鏁頒紶閫掍腑錛屾湁涓や釜寰堥噸瑕佺殑闂蹇呴』寰楀埌鏄庣‘璇存槑錛?/p> <ul> <li>褰撳弬鏁頒釜鏁板浜庝竴涓椂錛屾寜鐓т粈涔堥『搴忔妸鍙傛暟鍘嬪叆鍫嗘爤 <li>鍑芥暟璋冪敤鍚庯紝鐢辮皝鏉ユ妸鍫嗘爤鎭㈠鍘熻 </li> </ul> <p>鍦ㄩ珮綰ц璦涓紝閫氳繃鍑芥暟璋冪敤綰﹀畾鏉ヨ鏄庤繖涓や釜闂銆傚父瑙佺殑璋冪敤綰﹀畾鏈夛細 <ul> <li>stdcall <li>cdecl <li>fastcall <li>thiscall <li>naked call</li> </ul> <h2>stdcall璋冪敤綰﹀畾</h2> <p>stdcall寰堝鏃跺欒縐頒負pascal璋冪敤綰﹀畾錛屽洜涓簆ascal鏄棭鏈熷緢甯歌鐨勪竴縐嶆暀瀛︾敤璁$畻鏈虹▼搴忚璁¤璦錛屽叾璇硶涓ヨ皚錛屼嬌鐢ㄧ殑鍑芥暟璋冪敤綰﹀畾灝辨槸stdcall銆傚湪Microsoft C++緋誨垪鐨凜/C++緙栬瘧鍣ㄤ腑錛屽父甯哥敤PASCAL瀹忔潵澹版槑榪欎釜璋冪敤綰﹀畾錛岀被浼肩殑瀹忚繕鏈塛INAPI鍜孋ALLBACK銆?/p> <p>stdcall璋冪敤綰﹀畾澹版槑鐨勮娉曚負(浠ュ墠鏂囩殑閭d釜鍑芥暟涓轟緥錛夛細</p> <p>int __<font color=#0000ff><strong>stdcall</strong></font> function(int a,int b)</p> <p>stdcall鐨勮皟鐢ㄧ害瀹氭剰鍛崇潃錛?錛夊弬鏁頒粠鍙沖悜宸﹀帇鍏ュ爢鏍堬紝2錛夊嚱鏁拌嚜韜慨鏀瑰爢鏍?3)鍑芥暟鍚嶈嚜鍔ㄥ姞鍓嶅鐨勪笅鍒掔嚎錛屽悗闈㈢揣璺熶竴涓狜絎﹀彿錛屽叾鍚庣揣璺熺潃鍙傛暟鐨勫昂瀵?/p> <p>浠ヤ笂榪拌繖涓嚱鏁頒負渚嬶紝鍙傛暟b棣栧厛琚帇鏍堬紝鐒跺悗鏄弬鏁癮錛屽嚱鏁拌皟鐢╢unction(1,2)璋冪敤澶勭炕璇戞垚姹囩紪璇█灝嗗彉鎴愶細</p> <pre><blockquote> push 2 絎簩涓弬鏁板叆鏍? push 1 絎竴涓弬鏁板叆鏍? call function 璋冪敤鍙傛暟錛屾敞鎰忔鏃惰嚜鍔ㄦ妸cs:eip鍏ユ爤 </blockquote> </pre> <p>鑰屽浜庡嚱鏁拌嚜韜紝鍒欏彲浠ョ炕璇戜負錛? <pre><blockquote> 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澶勪繚瀛樹簡b mov esp,ebp 鎭㈠esp pop ebp ret 8 </blockquote></pre> <p>鑰屽湪緙栬瘧鏃訛紝榪欎釜鍑芥暟鐨勫悕瀛楄緲昏瘧鎴恄function@8 <p>娉ㄦ剰涓嶅悓緙栬瘧鍣ㄤ細鎻掑叆鑷繁鐨勬眹緙栦唬鐮佷互鎻愪緵緙栬瘧鐨勯氱敤鎬э紝浣嗘槸澶т綋浠g爜濡傛銆傚叾涓湪鍑芥暟寮濮嬪淇濈暀esp鍒癳bp涓紝鍦ㄥ嚱鏁扮粨鏉熸仮澶嶆槸緙栬瘧鍣ㄥ父鐢ㄧ殑鏂規硶銆?/p> <p>浠庡嚱鏁拌皟鐢ㄧ湅錛?鍜?渚濇琚玴ush榪涘爢鏍堬紝鑰屽湪鍑芥暟涓張閫氳繃鐩稿浜巈bp(鍗沖垰榪涘嚱鏁版椂鐨勫爢鏍堟寚閽堬級鐨勫亸縐婚噺瀛樺彇鍙傛暟銆傚嚱鏁扮粨鏉熷悗錛宺et 8琛ㄧず娓呯悊8涓瓧鑺傜殑鍫嗘爤錛屽嚱鏁拌嚜宸辨仮澶嶄簡鍫嗘爤銆?/p> <h2>cdecl璋冪敤綰﹀畾</h2> <p>cdecl璋冪敤綰﹀畾鍙堢О涓篊璋冪敤綰﹀畾錛屾槸C璇█緙虹渷鐨勮皟鐢ㄧ害瀹氾紝瀹冪殑瀹氫箟璇硶鏄細 <pre><blockquote> int function (int a ,int b) //涓嶅姞淇グ灝辨槸C璋冪敤綰﹀畾 int __cdecl function(int a,int b)//鏄庣‘鎸囧嚭C璋冪敤綰﹀畾 </blockquote> </pre> <p>鍦ㄥ啓鏈枃鏃訛紝鍑轟箮鎴戠殑鎰忔枡錛屽彂鐜癱decl璋冪敤綰﹀畾鐨勫弬鏁板帇鏍堥『搴忔槸鍜宻tdcall鏄竴鏍風殑錛屽弬鏁伴鍏堢敱鏈夊悜宸﹀帇鍏ュ爢鏍堛傛墍涓嶅悓鐨勬槸錛屽嚱鏁版湰韜笉娓呯悊鍫嗘爤錛岃皟鐢ㄨ呰礋璐f竻鐞嗗爢鏍堛傜敱浜庤繖縐嶅彉鍖栵紝C璋冪敤綰﹀畾鍏佽鍑芥暟鐨勫弬鏁扮殑涓暟鏄笉鍥哄畾鐨勶紝榪欎篃鏄疌璇█鐨勪竴澶х壒鑹層傚浜庡墠闈㈢殑function鍑芥暟錛屼嬌鐢╟decl鍚庣殑姹囩紪鐮佸彉鎴愶細 <pre><blockquote> <strong>璋冪敤澶?/strong> push 1 push 2 call function add esp,8 <strong>娉ㄦ剰錛氳繖閲岃皟鐢ㄨ呭湪鎭㈠鍫嗘爤</strong> <strong>琚皟鐢ㄥ嚱鏁癬function澶?/strong> 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澶勪繚瀛樹簡b mov esp,ebp 鎭㈠esp pop ebp ret <strong>娉ㄦ剰錛岃繖閲屾病鏈変慨鏀瑰爢鏍?/strong> </blockquote> </pre> <p>MSDN涓錛岃淇グ鑷姩鍦ㄥ嚱鏁板悕鍓嶅姞鍓嶅鐨勪笅鍒掔嚎錛屽洜姝ゅ嚱鏁板悕鍦ㄧ鍙瘋〃涓璁板綍涓篲function錛屼絾鏄垜鍦ㄧ紪璇戞椂浼間箮娌℃湁鐪嬪埌榪欑鍙樺寲銆?/p> <p>鐢變簬鍙傛暟鎸夌収浠庡彸鍚戝乏欏哄簭鍘嬫爤錛屽洜姝ゆ渶寮濮嬬殑鍙傛暟鍦ㄦ渶鎺ヨ繎鏍堥《鐨勪綅緗紝鍥犳褰撻噰鐢ㄤ笉瀹氫釜鏁板弬鏁版椂錛岀涓涓弬鏁板湪鏍堜腑鐨勪綅緗偗瀹氳兘鐭ラ亾錛屽彧瑕佷笉瀹氱殑鍙傛暟涓暟鑳藉鏍規嵁絎竴涓悗鑰呭悗緇殑鏄庣‘鐨勫弬鏁扮‘瀹氫笅鏉ワ紝灝卞彲浠ヤ嬌鐢ㄤ笉瀹氬弬鏁幫紝渚嬪瀵逛簬CRT涓殑sprintf鍑芥暟錛屽畾涔変負錛? <p><strong>int sprintf(char* buffer,const char* format,...)</strong></p> <p>鐢變簬鎵鏈夌殑涓嶅畾鍙傛暟閮藉彲浠ラ氳繃format紜畾錛屽洜姝や嬌鐢ㄤ笉瀹氫釜鏁扮殑鍙傛暟鏄病鏈夐棶棰樼殑銆?/p> <h2>fastcall</h2> <p>fastcall璋冪敤綰﹀畾鍜宻tdcall綾諱技錛屽畠鎰忓懗鐫錛? <ul> <li>鍑芥暟鐨勭涓涓拰絎簩涓狣WORD鍙傛暟錛堟垨鑰呭昂瀵告洿灝忕殑錛夐氳繃ecx鍜宔dx浼犻掞紝鍏朵粬鍙傛暟閫氳繃浠庡彸鍚戝乏鐨勯『搴忓帇鏍? <li>琚皟鐢ㄥ嚱鏁版竻鐞嗗爢鏍? <li>鍑芥暟鍚嶄慨鏀硅鍒欏悓stdcall </li> </ul> <p>鍏跺0鏄庤娉曚負錛歩nt fastcall function(int a,int b)</p> <h2>thiscall</h2> <p>thiscall鏄敮涓涓涓笉鑳芥槑紜寚鏄庣殑鍑芥暟淇グ錛屽洜涓簍hiscall涓嶆槸鍏抽敭瀛椼傚畠鏄疌++綾繪垚鍛樺嚱鏁扮己鐪佺殑璋冪敤綰﹀畾銆傜敱浜庢垚鍛樺嚱鏁拌皟鐢ㄨ繕鏈変竴涓猼his鎸囬拡錛屽洜姝ゅ繀欏葷壒孌婂鐞嗭紝thiscall鎰忓懗鐫錛? <ul> <li>鍙傛暟浠庡彸鍚戝乏鍏ユ爤 <li>濡傛灉鍙傛暟涓暟紜畾錛宼his鎸囬拡閫氳繃ecx浼犻掔粰琚皟鐢ㄨ咃紱濡傛灉鍙傛暟涓暟涓嶇‘瀹氾紝this鎸囬拡鍦ㄦ墍鏈夊弬鏁板帇鏍堝悗琚帇鍏ュ爢鏍堛? <li>瀵瑰弬鏁頒釜鏁頒笉瀹氱殑錛岃皟鐢ㄨ呮竻鐞嗗爢鏍堬紝鍚﹀垯鍑芥暟鑷繁娓呯悊鍫嗘爤 </li> </ul> <p>涓轟簡璇存槑榪欎釜璋冪敤綰﹀畾錛屽畾涔夊涓嬬被鍜屼嬌鐢ㄤ唬鐮侊細 <pre>class A { public:    int function1(int a,int b);    int function2(int a,...); }; int A::function1 (int a,int b) {    return a+b; } #include <stdarg.h> 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); } </pre> <p>callee鍑芥暟琚炕璇戞垚姹囩紪鍚庡氨鍙樻垚錛? <pre><blockquote> //鍑芥暟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 </blockquote></pre> <p>鍙錛屽浜庡弬鏁頒釜鏁板浐瀹氭儏鍐典笅錛屽畠綾諱技浜巗tdcall錛屼笉瀹氭椂鍒欑被浼糲decl</p> <h2>naked call</h2> <p>榪欐槸涓涓緢灝戣鐨勮皟鐢ㄧ害瀹氾紝涓鑸▼搴忚璁¤呭緩璁笉瑕佷嬌鐢ㄣ傜紪璇戝櫒涓嶄細緇欒繖縐嶅嚱鏁板鍔犲垵濮嬪寲鍜屾竻鐞嗕唬鐮侊紝鏇寸壒孌婄殑鏄紝浣犱笉鑳界敤return榪斿洖榪斿洖鍊鹼紝鍙兘鐢ㄦ彃鍏ユ眹緙栬繑鍥炵粨鏋溿傝繖涓鑸敤浜庡疄妯″紡椹卞姩紼嬪簭璁捐錛屽亣璁懼畾涔変竴涓眰鍜岀殑鍔犳硶紼嬪簭錛屽彲浠ュ畾涔変負錛? <pre>__declspec(naked) int add(int a,int b) { __asm mov eax,a __asm add eax,b __asm ret } </pre> <p>娉ㄦ剰錛岃繖涓嚱鏁版病鏈夋樉寮忕殑return榪斿洖鍊鹼紝榪斿洖閫氳繃淇敼eax瀵勫瓨鍣ㄥ疄鐜幫紝鑰屼笖榪為鍑哄嚱鏁扮殑ret鎸囦護閮藉繀欏繪樉寮忔彃鍏ャ備笂闈唬鐮佽緲昏瘧鎴愭眹緙栦互鍚庡彉鎴愶細 <pre><blockquote> mov eax,[ebp+8] add eax,[ebp+12] ret 8 </blockquote> </pre> <p>娉ㄦ剰榪欎釜淇グ鏄拰__stdcall鍙奵decl緇撳悎浣跨敤鐨勶紝鍓嶉潰鏄畠鍜宑decl緇撳悎浣跨敤鐨勪唬鐮侊紝瀵逛簬鍜宻tdcall緇撳悎鐨勪唬鐮侊紝鍒欏彉鎴愶細 <pre>__declspec(naked) int __stdcall function(int a,int b) { __asm mov eax,a __asm add eax,b __asm ret 8 //娉ㄦ剰鍚庨潰鐨? } </pre> <p>鑷充簬榪欑鍑芥暟琚皟鐢紝鍒欏拰鏅氱殑cdecl鍙妔tdcall璋冪敤鍑芥暟涓鑷淬?/p> <h2>鍑芥暟璋冪敤綰﹀畾瀵艱嚧鐨勫父瑙侀棶棰?/h2> <p>濡傛灉瀹氫箟鐨勭害瀹氬拰浣跨敤鐨勭害瀹氫笉涓鑷達紝鍒欏皢瀵艱嚧鍫嗘爤琚牬鍧忥紝瀵艱嚧涓ラ噸闂錛屼笅闈㈡槸涓ょ甯歌鐨勯棶棰橈細 <ol> <li>鍑芥暟鍘熷瀷澹版槑鍜屽嚱鏁頒綋瀹氫箟涓嶄竴鑷? <li>DLL瀵煎叆鍑芥暟鏃跺0鏄庝簡涓嶅悓鐨勫嚱鏁扮害瀹?</li> </ol> <p>浠ュ悗鑰呬負渚嬶紝鍋囪鎴戜滑鍦╠ll縐嶅0鏄庝簡涓縐嶅嚱鏁頒負錛? <pre>__declspec(dllexport) int func(int a,int b);//娉ㄦ剰錛岃繖閲屾病鏈塻tdcall錛屼嬌鐢ㄧ殑鏄痗decl</pre> <p>浣跨敤鏃朵唬鐮佷負錛? <pre> typedef int (*WINAPI DLLFUNC)func(int a,int b); hLib = LoadLibrary(...); DLLFUNC func = (DLLFUNC)GetProcAddress(...)//榪欓噷淇敼浜嗚皟鐢ㄧ害瀹? result = func(1,2);//瀵艱嚧閿欒 </pre> <p>鐢變簬璋冪敤鑰呮病鏈夌悊瑙INAPI鐨勫惈涔夐敊璇殑澧炲姞浜嗚繖涓慨楗幫紝涓婅堪浠g爜蹇呯劧瀵艱嚧鍫嗘爤琚牬鍧忥紝MFC鍦ㄧ紪璇戞椂鎻掑叆鐨刢heckesp鍑芥暟灝嗗憡璇変綘錛屽爢鏍堣鐮村潖浜嗐?br><br><br><br><br> <table height=849 cellSpacing=0 cellPadding=0 width=780 align=center border=0> <tbody> <tr> <td class=text width=739 height=64> <div align=left> <p>DLL涓皟鐢ㄧ害瀹氬拰鍚嶇О淇グ- -<br><br>璋冪敤綰﹀畾錛圕alling Convention錛夋槸鎸囧湪紼嬪簭璁捐璇█涓負浜嗗疄鐜板嚱鏁拌皟鐢ㄨ屽緩绔嬬殑涓縐嶅崗璁傝繖縐嶅崗璁瀹氫簡璇ヨ璦鐨勫嚱鏁頒腑鐨勫弬鏁頒紶閫佹柟寮忋佸弬鏁版槸鍚﹀彲鍙樺拰鐢辮皝鏉ュ鐞嗗爢鏍堢瓑闂銆備笉鍚岀殑璇█瀹氫箟浜嗕笉鍚岀殑璋冪敤綰﹀畾銆?/p> <p>鍦–++涓紝涓轟簡鍏佽鎿嶄綔絎﹂噸杞藉拰鍑芥暟閲嶈澆錛孋++緙栬瘧鍣ㄥ線寰鎸夌収鏌愮瑙勫垯鏀瑰啓姣忎竴涓叆鍙g偣鐨勭鍙峰悕錛屼互渚垮厑璁稿悓涓涓悕瀛楋紙鍏鋒湁涓嶅悓鐨勫弬鏁扮被鍨嬫垨鑰呮槸涓嶅悓鐨勪綔鐢ㄥ煙錛夋湁澶氫釜鐢ㄦ硶錛岃屼笉浼氭墦鐮寸幇鏈夌殑鍩轟簬C鐨勯摼鎺ュ櫒銆傝繖欏規妧鏈氬父琚О涓哄悕縐版敼緙栵紙Name Mangling錛夋垨鑰呭悕縐頒慨楗幫紙Name Decoration錛夈傝澶欳++緙栬瘧鍣ㄥ巶鍟嗛夋嫨浜嗚嚜宸辯殑鍚嶇О淇グ鏂規銆?/p> <p>鍥犳錛屼負浜嗕嬌鍏跺畠璇█緙栧啓鐨勬ā鍧楋紙濡俈isual Basic搴旂敤紼嬪簭銆丳ascal鎴朏ortran鐨勫簲鐢ㄧ▼搴忕瓑錛夊彲浠ヨ皟鐢–/C++緙栧啓鐨凞LL鐨勫嚱鏁幫紝蹇呴』浣跨敤姝g‘鐨勮皟鐢ㄧ害瀹氭潵瀵煎嚭鍑芥暟錛屽茍涓斾笉瑕佽緙栬瘧鍣ㄥ瑕佸鍑虹殑鍑芥暟榪涜浠諱綍鍚嶇О淇グ銆?br>1錛庤皟鐢ㄧ害瀹氾紙Calling Convention錛?br>璋冪敤綰﹀畾鐢ㄦ潵澶勭悊鍐沖畾鍑芥暟鍙傛暟浼犻佹椂鍏ユ爤鍜屽嚭鏍堢殑欏哄簭錛堢敱璋冪敤鑰呰繕鏄璋冪敤鑰呮妸鍙傛暟寮瑰嚭鏍堬級錛屼互鍙婄紪璇戝櫒鐢ㄦ潵璇嗗埆鍑芥暟鍚嶇О鐨勫悕縐頒慨楗扮害瀹氱瓑闂銆傚湪Microsoft VC++ 6.0涓畾涔変簡涓嬮潰鍑犵璋冪敤綰﹀畾錛屾垜浠皢緇撳悎姹囩紪璇█鏉ヤ竴涓鍒嗘瀽瀹冧滑錛?br>1銆乢_cdecl<br>__cdecl鏄疌/C++鍜孧FC紼嬪簭榛樿浣跨敤鐨勮皟鐢ㄧ害瀹氾紝涔熷彲浠ュ湪鍑芥暟澹版槑鏃跺姞涓奯_cdecl鍏抽敭瀛楁潵鎵嬪伐鎸囧畾銆傞噰鐢╛_cdecl綰﹀畾鏃訛紝鍑芥暟鍙傛暟鎸夌収浠庡彸鍒板乏鐨勯『搴忓叆鏍堬紝騫朵笖鐢辮皟鐢ㄥ嚱鏁拌呮妸鍙傛暟寮瑰嚭鏍堜互娓呯悊鍫嗘爤銆傚洜姝わ紝瀹炵幇鍙彉鍙傛暟鐨勫嚱鏁板彧鑳戒嬌鐢ㄨ璋冪敤綰﹀畾銆傜敱浜庢瘡涓涓嬌鐢╛_cdecl綰﹀畾鐨勫嚱鏁伴兘瑕佸寘鍚竻鐞嗗爢鏍堢殑浠g爜錛屾墍浠ヤ駭鐢熺殑鍙墽琛屾枃浠跺ぇ灝忎細姣旇緝澶с俖_cdecl鍙互鍐欐垚_cdecl銆?/p> <p>涓嬮潰灝嗛氳繃涓涓叿浣撳疄渚嬫潵鍒嗘瀽__cdecl綰﹀畾錛?/p> <p>鍦╒C++涓柊寤轟竴涓猈in32 Console宸ョ▼錛屽懡鍚嶄負cdecl銆傚叾浠g爜濡備笅錛?/p> <p>int __cdecl Add(int a, int b); //鍑芥暟澹版槑</p> <p>void main()<br>{<br>Add(1,2); //鍑芥暟璋冪敤<br>}</p> <p>int __cdecl Add(int a, int b) //鍑芥暟瀹炵幇<br>{<br>return (a + b);<br>}</p> <p>鍑芥暟璋冪敤澶勫弽姹囩紪浠g爜濡備笅錛?/p> <p>;Add(1,2);<br>push 2 ;鍙傛暟浠庡彸鍒板乏鍏ユ爤錛屽厛鍘嬪叆2<br>push 1 ;鍘嬪叆1<br>call @ILT+0(Add) (00401005) ;璋冪敤鍑芥暟瀹炵幇<br>add esp,8 ;鐢卞嚱鏁拌皟鐢ㄦ竻鏍?br>2銆乢_stdcall<br>__stdcall璋冪敤綰﹀畾鐢ㄤ簬璋冪敤Win32 API鍑芥暟銆傞噰鐢╛_stdcal綰﹀畾鏃訛紝鍑芥暟鍙傛暟鎸夌収浠庡彸鍒板乏鐨勯『搴忓叆鏍堬紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鏍堬紝鍑芥暟鍙傛暟涓暟鍥哄畾銆傜敱浜庡嚱鏁頒綋鏈韓鐭ラ亾浼犺繘鏉ョ殑鍙傛暟涓暟錛屽洜姝よ璋冪敤鐨勫嚱鏁板彲浠ュ湪榪斿洖鍓嶇敤涓鏉et n鎸囦護鐩存帴娓呯悊浼犻掑弬鏁扮殑鍫嗘爤銆俖_stdcall鍙互鍐欐垚_stdcall銆?/p> <p>榪樻槸閭d釜渚嬪瓙錛屽皢__cdecl綰﹀畾鎹㈡垚__stdcall錛?/p> <p>int __stdcall Add(int a, int b)<br>{<br>return (a + b);<br>}</p> <p>鍑芥暟璋冪敤澶勫弽姹囩紪浠g爜錛?br><br>; Add(1,2);<br>push 2 ;鍙傛暟浠庡彸鍒板乏鍏ユ爤錛屽厛鍘嬪叆2<br>push 1 ;鍘嬪叆1<br>call @ILT+10(Add) (0040100f) ;璋冪敤鍑芥暟瀹炵幇</p> <p>鍑芥暟瀹炵幇閮ㄥ垎鐨勫弽姹囩紪浠g爜錛?/p> <p>;int __stdcall Add(int a, int b)<br>push ebp<br>mov ebp,esp<br>sub esp,40h<br>push ebx<br>push esi<br>push edi<br>lea edi,[ebp-40h]<br>mov ecx,10h<br>mov eax,0CCCCCCCCh<br>rep stos dword ptr [edi]<br>;return (a + b);<br>mov eax,dword ptr [ebp+8]<br>add eax,dword ptr [ebp+0Ch]<br>pop edi<br>pop esi<br>pop ebx<br>mov esp,ebp<br>pop ebp<br>ret 8 ;娓呮爤<br>3銆乢_fastcall<br>__fastcall綰﹀畾鐢ㄤ簬瀵規ц兘瑕佹眰闈炲父楂樼殑鍦哄悎銆俖_fastcall綰﹀畾灝嗗嚱鏁扮殑浠庡乏杈瑰紑濮嬬殑涓や釜澶у皬涓嶅ぇ浜?涓瓧鑺傦紙DWORD錛夌殑鍙傛暟鍒嗗埆鏀懼湪ECX鍜孍DX瀵勫瓨鍣紝鍏朵綑鐨勫弬鏁頒粛鏃ц嚜鍙沖悜宸﹀帇鏍堜紶閫侊紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鍫嗘爤銆俖_fastcall鍙互鍐欐垚_fastcall銆?/p> <p>渚濇棫鏄浉綾諱技鐨勪緥瀛愶紝姝ゆ椂鍑芥暟璋冪敤綰﹀畾涓篲_fastcall錛屽嚱鏁板弬鏁頒釜鏁板鍔?涓細</p> <p>int __fastcall Add(int a, double b, int c, int d)<br>{<br>return (a + b + c + d);<br>}</p> <p>鍑芥暟璋冪敤閮ㄥ垎鐨勬眹緙栦唬鐮侊細</p> <p>;Add(1, 2, 3, 4);<br>push 4 ;鍚庝袱涓弬鏁頒粠鍙沖埌宸﹀叆鏍堬紝鍏堝帇鍏?<br>mov edx,3 ;灝唅nt綾誨瀷鐨?鏀懼叆edx<br>push 40000000h ;鍘嬪叆double綾誨瀷鐨?<br>push 0<br>mov ecx,1 ;灝唅nt綾誨瀷鐨?鏀懼叆ecx<br>call @ILT+0(Add) (00401005) ;璋冪敤鍑芥暟瀹炵幇</p> <p>鍑芥暟瀹炵幇閮ㄥ垎鐨勫弽姹囩紪浠g爜錛?br><br>; int __fastcall Add(int a, double b, int c, int d)<br>push ebp<br>mov ebp,esp<br>sub esp,48h<br>push ebx<br>push esi<br>push edi<br>push ecx<br>lea edi,[ebp-48h]<br>mov ecx,12h<br>mov eax,0CCCCCCCCh<br>rep stos dword ptr [edi]<br>pop ecx<br>mov dword ptr [ebp-8],edx<br>mov dword ptr [ebp-4],ecx<br>;return (a + b + c + d);<br>fild dword ptr [ebp-4]<br>fadd qword ptr [ebp+8]<br>fiadd dword ptr [ebp-8]<br>fiadd dword ptr [ebp+10h]<br>call __ftol (004011b8)<br>pop edi<br>pop esi<br>pop ebx<br>mov esp,ebp<br>pop ebp<br>ret 0Ch ;娓呮爤</p> <p>鍏抽敭瀛梍_cdecl銆乢_stdcall鍜宊_fastcall鍙互鐩存帴鍔犲湪瑕佽緭鍑虹殑鍑芥暟鍓嶏紝涔熷彲浠ュ湪緙栬瘧鐜鐨凷etting...->C/C++->Code Generation欏歸夋嫨銆傚畠浠搴旂殑鍛戒護琛屽弬鏁板垎鍒負/Gd銆?Gz鍜?Gr銆傜己鐪佺姸鎬佷負/Gd錛屽嵆__cdecl銆傚綋鍔犲湪杈撳嚭鍑芥暟鍓嶇殑鍏抽敭瀛椾笌緙栬瘧鐜涓殑閫夋嫨涓嶅悓鏃訛紝鐩存帴鍔犲湪杈撳嚭鍑芥暟鍓嶇殑鍏抽敭瀛楁湁鏁堛?br>4銆乼hiscall<br>thiscall璋冪敤綰﹀畾鏄疌++涓殑闈為潤鎬佺被鎴愬憳鍑芥暟鐨勯粯璁よ皟鐢ㄧ害瀹氥倀hiscall鍙兘琚紪璇戝櫒浣跨敤錛屾病鏈夌浉搴旂殑鍏抽敭瀛楋紝鍥犳涓嶈兘琚▼搴忓憳鎸囧畾銆傞噰鐢╰hiscall綰﹀畾鏃訛紝鍑芥暟鍙傛暟鎸夌収浠庡彸鍒板乏鐨勯『搴忓叆鏍堬紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鏍堬紝鍙槸鍙﹀閫氳繃ECX瀵勫瓨鍣ㄤ紶閫佷竴涓澶栫殑鍙傛暟錛歵his鎸囬拡銆?/p> <p>榪欐鐨勪緥瀛愪腑灝嗗畾涔変竴涓被錛屽茍鍦ㄧ被涓畾涔変竴涓垚鍛樺嚱鏁幫紝浠g爜濡備笅錛?/p> <p>class CSum<br>{<br>public:<br>int Add(int a, int b)<br>{<br>return (a + b);<br>}<br>};</p> <p>void main()<br>{ <br>CSum sum;<br>sum.Add(1, 2);<br>}</p> <p>鍑芥暟璋冪敤閮ㄥ垎姹囩紪浠g爜錛?/p> <p>;CSum sum;<br>;sum.Add(1, 2);<br>push 2 ;鍙傛暟浠庡彸鍒板乏鍏ユ爤錛屽厛鍘嬪叆2<br>push 1 ;鍘嬪叆1<br>lea ecx,[ebp-4] ;ecx瀛樻斁浜唗his鎸囬拡<br>call @ILT+5(CSum::Add) (0040100a) ;璋冪敤鍑芥暟瀹炵幇</p> <p>鍑芥暟瀹炵幇閮ㄥ垎姹囩紪浠g爜錛?/p> <p>;int Add(int a, int b)<br>push ebp<br>mov ebp,esp<br>sub esp,44h ;澶氱敤浜嗕竴涓?bytes鐨勭┖闂寸敤浜庡瓨鏀総his鎸囬拡<br>push ebx<br>push esi<br>push edi<br>push ecx<br>lea edi,[ebp-44h]<br>mov ecx,11h<br>mov eax,0CCCCCCCCh<br>rep stos dword ptr [edi]<br>pop ecx<br>mov dword ptr [ebp-4],ecx<br>;return (a + b);<br>mov eax,dword ptr [ebp+8]<br>add eax,dword ptr [ebp+0Ch]<br>pop edi<br>pop esi<br>pop ebx<br>mov esp,ebp<br>pop ebp<br>ret 8 ;娓呮爤<br>5銆乶aked灞炴?br>閲囩敤涓婇潰鎵榪扮殑鍥涚璋冪敤綰﹀畾鐨勫嚱鏁板湪榪涘叆鍑芥暟鏃訛紝緙栬瘧鍣ㄤ細浜х敓浠g爜鏉ヤ繚瀛楨SI銆丒DI銆丒BX銆丒BP瀵勫瓨鍣ㄤ腑鐨勫鹼紝閫鍑哄嚱鏁版椂鍒欎駭鐢熶唬鐮佹仮澶嶈繖浜涘瘎瀛樺櫒鐨勫唴瀹廣傚浜庡畾涔変簡naked灞炴х殑鍑芥暟錛岀紪璇戝櫒涓嶄細鑷姩浜х敓榪欐牱鐨勪唬鐮侊紝闇瑕佷綘鎵嬪伐浣跨敤鍐呭祵姹囩紪鏉ユ帶鍒跺嚱鏁板疄鐜頒腑鐨勫爢鏍堢鐞嗐傜敱浜巒aked灞炴у茍涓嶆槸綾誨瀷淇グ絎︼紝鏁呭繀欏誨拰__declspec鍏卞悓浣跨敤銆備笅闈㈢殑榪欐浠g爜瀹氫箟浜嗕竴涓嬌鐢ㄤ簡naked灞炴х殑鍑芥暟鍙婂叾瀹炵幇錛?/p> <p>__declspec ( naked ) func()<br>{<br>int i;<br>int j;<br><br>_asm<br>{<br>push ebp<br>mov ebp, esp<br>sub esp, __LOCAL_SIZE<br>}<br><br>_asm<br>{<br>mov esp, ebp<br>pop ebp<br>ret<br>}<br>}</p> <p>naked灞炴т笌鏈妭鍏崇郴涓嶅ぇ錛屽叿浣撹鍙傝僊SDN銆?br>6銆乄INAPI<br>榪樻湁涓涓煎緱涓鎻愮殑鏄疻INAPI瀹忥紝瀹冨彲浠ヨ緲昏瘧鎴愰傚綋鐨勮皟鐢ㄧ害瀹氫互渚涘嚱鏁頒嬌鐢ㄣ傝瀹忓畾涔変簬windef.h涔嬩腑銆備笅闈㈡槸鍦╳indef.h涓殑閮ㄥ垎鍐呭錛?/p> <p>#define CDECL _cdecl<br>#define WINAPI CDECL<br>#define CALLBACK __stdcall<br>#define WINAPI __stdcall<br>#define APIENTRY WINAPI</p> <p>鐢辨鍙錛學INAPI銆丆ALLBACK銆丄PIENTRY絳夊畯鐨勪綔鐢ㄣ?br></p> 2錛庡悕縐頒慨楗幫紙Name Decoration錛?br>C鎴朇++鍑芥暟鍦ㄥ唴閮紙緙栬瘧鍜岄摼鎺ワ級閫氳繃淇グ鍚嶏紙Decoration Name錛夎瘑鍒傚嚱鏁扮殑淇グ鍚嶆槸緙栬瘧鍣ㄥ湪緙栬瘧鍑芥暟瀹氫箟鎴栬呭師鍨嬫椂鐢熸垚鐨勫瓧絎︿覆銆傜紪璇戝櫒鍦ㄥ垱寤?obj鏂囦歡鏃跺鍑芥暟鍚嶇О榪涜淇グ銆傛湁浜涙儏鍐典笅浣跨敤鍑芥暟鐨勪慨楗板悕鏄繀瑕佺殑錛屽鍦ㄦā鍧楀畾涔夋枃浠墮噷澶存寚瀹氳緭鍑篊++閲嶈澆鍑芥暟銆佹瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁幫紝鍙堝鍦ㄦ眹緙栦唬鐮侀噷璋冪敤C鎴朇++鍑芥暟絳夈? <p>鍦╒C++涓紝鍑芥暟淇グ鍚嶇敱緙栬瘧綾誨瀷錛圕鎴朇++錛夈佸嚱鏁板悕銆佺被鍚嶃佽皟鐢ㄧ害瀹氥佽繑鍥炵被鍨嬨佸弬鏁扮瓑澶氱鍥犵礌鍏卞悓鍐沖畾銆備笅闈㈠垎C緙栬瘧銆丆++緙栬瘧錛堥潪綾繪垚鍛樺嚱鏁幫級鍜孋++綾誨強鍏舵垚鍛樺嚱鏁扮紪璇戜笁縐嶆儏鍐佃鏄庯細<br>1銆丆緙栬瘧鏃跺嚱鏁板悕縐頒慨楗?br>褰撳嚱鏁頒嬌鐢╛_cdecl璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄤ粎鍦ㄥ師鍑芥暟鍚嶅墠鍔犱笂涓涓笅鍒掔嚎鍓嶇紑錛屾牸寮忎負_functionname銆備緥濡傦細鍑芥暟int __cdecl Add(int a, int b)錛岃緭鍑哄悗涓猴細_Add銆?/p> <p>褰撳嚱鏁頒嬌鐢╛_stdcall璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄥ湪鍘熷嚱鏁板悕鍓嶅姞涓婁竴涓笅鍒掔嚎鍓嶇紑錛屽悗闈㈠姞涓婁竴涓狜絎﹀彿鍜屽嚱鏁板弬鏁扮殑瀛楄妭鏁幫紝鏍煎紡涓篲functionname@number銆備緥濡傦細鍑芥暟int __stdcall Add(int a, int b)錛岃緭鍑哄悗涓猴細_Add@8銆?/p> <p>褰撳嚱鏁版槸鐢╛_fastcall璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄥ湪鍘熷嚱鏁板悕鍓嶅姞涓婁竴涓狜絎﹀彿錛屽悗闈㈡槸鍔犱竴涓狜絎﹀彿鍜屽嚱鏁板弬鏁扮殑瀛楄妭鏁幫紝鏍煎紡涓篅functionname@number銆備緥濡傦細鍑芥暟int __fastcall Add(int a, int b)錛岃緭鍑哄悗涓猴細@Add@8銆?/p> <p>浠ヤ笂鏀瑰彉鍧囦笉浼氭敼鍙樺師鍑芥暟鍚嶄腑鐨勫瓧絎﹀ぇ灝忓啓銆?br>2銆丆++緙栬瘧鏃跺嚱鏁幫紙闈炵被鎴愬憳鍑芥暟錛夊悕縐頒慨楗?br>褰撳嚱鏁頒嬌鐢╛_cdecl璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄨ繘琛屼互涓嬪伐浣滐細</p> <p>1錛庝互?鏍囪瘑鍑芥暟鍚嶇殑寮濮嬶紝鍚庤窡鍑芥暟鍚嶏紱<br>2錛庡嚱鏁板悕鍚庨潰浠@YA鏍囪瘑寮濮嬶紝鍚庤窡榪斿洖鍊煎拰鍙傛暟琛紱<br>3錛庡綋鍑芥暟鐨勮繑鍥炲兼垨鑰呭弬鏁頒笌C++綾繪棤鍏崇殑鏃跺欙紝榪斿洖鍊煎拰鍙傛暟琛ㄤ互涓嬪垪浠e彿琛ㄧず錛?br>B錛歝onst<br>D錛歝har<br>E錛歶nsigned char<br>F錛歴hort<br>G錛歶nsigned short<br>H錛歩nt<br>I錛歶nsigned int<br>J錛歭ong<br>K錛歶nsigned long<br>M錛歠loat<br>N錛歞ouble<br>_N錛歜ool<br>PA錛氭寚閽堬紙*錛屽悗闈㈢殑浠e彿琛ㄦ槑鎸囬拡綾誨瀷錛屽鏋滅浉鍚岀被鍨嬬殑鎸囬拡榪炵畫鍑虹幇錛屼互0<br>浠f浛錛屼竴涓?浠h〃涓嬈¢噸澶嶏級<br>PB錛歝onst鎸囬拡<br>AA錛氬紩鐢紙&錛?br>AB錛歝onst寮曠敤<br>U錛氱被鎴栫粨鏋勪綋<br>V錛欼nterface錛堟帴鍙o級<br>W4錛歟num<br>X錛歷oid<br>4銆丂@YA鏍囪瘑涔嬪悗绱ц窡鐨勬槸璇ュ嚱鏁扮殑榪斿洖鍊肩被鍨嬶紝鍏跺悗渚濇涓哄弬鏁扮殑鏁版嵁綾誨瀷錛屾寚閽堟爣璇嗗湪鍏舵墍鎸囨暟鎹被鍨嬪墠銆傚綋鍑芥暟鐨勮繑鍥炲兼垨鑰呭弬鏁頒笌C++綾繪棤鍏崇殑鏃跺欙紝鍏跺鐞嗙鍚堟湰鏉¤鍒欙紝鍚﹀垯鎸夌収5銆?瑙勫垯澶勭悊錛?br>5銆佸綋鍑芥暟榪斿洖鍊間負鏌愪釜綾繪垨甯︽湁const鎬ц川鐨勭被鐨勬椂鍊欙紝榪斿洖鍊肩殑鍛藉悕涓猴細?A/?B+V+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級銆傚綋鍑芥暟榪斿洖鍊間負鏌愪釜綾葷殑鎸囬拡/寮曠敤鎴栬呭甫鏈塩onst鎬ц川鐨勭被鐨勬寚閽?寮曠敤鐨勬椂鍊欙紝榪斿洖鍊肩殑鍛藉悕涓猴細PA/AA鎴栬匬B/AB+V+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級錛?br>6銆佸嚱鏁板弬鏁頒負鏌愪釜綾葷殑鏃跺欙紝騫朵笖璇ュ弬鏁版墍浣跨敤鐨勭被鏇劇粡鍑虹幇榪囩殑璇濓紙涔熷氨鏄笌鍑芥暟榪斿洖鍊兼墍浣跨敤鐨勭被鐩稿悓鎴栬呬笌鍓嶄竴涓弬鏁頒嬌鐢ㄧ殑綾葷浉鍚岋級錛屽垯璇ュ弬鏁扮被鍨嬫牸寮忎負錛歏+1+@錛堜笉甯﹀姞鍙鳳級銆傚鏋滆鍙傛暟鎵浣跨敤鐨勭被娌℃湁鍑虹幇榪囩殑璇濓紝鍒欒鍙傛暟綾誨瀷鏍煎紡涓猴細V+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級銆傚嚱鏁板弬鏁頒負鏌愪釜綾葷殑鎸囬拡/寮曠敤鎴栬呭甫鏈塩onst鎬ц川鎸囬拡/寮曠敤鐨勬椂鍊欙紝鍒欒鍙傛暟綾誨瀷鏍煎紡鏄湪涓婅堪鏍煎紡鐨勫熀紜涓婂湪V鍓嶉潰鍔犱笂浠h〃鎸囬拡/寮曠敤綾誨瀷鎴栬呭甫鏈塩onst鎬ц川鎸囬拡/寮曠敤綾誨瀷鐨勬爣璇嗙錛圥A/AA鎴朠B/AB錛夛紱<br>7銆佸弬鏁拌〃鍚庝互@Z鏍囪瘑鏁翠釜鍚嶅瓧鐨勭粨鏉燂紝濡傛灉璇ュ嚱鏁版棤鍙傛暟錛屽垯浠鏍囪瘑緇撴潫銆?/p> <p>褰撳嚱鏁頒嬌鐢╛_stdcall璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄦ墍鍋氬伐浣滅殑瑙勫垯鍚屼笂闈㈢殑__cdecl璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨凘@YA鍙樹負@@YG銆?/p> <p>褰撳嚱鏁頒嬌鐢╛_fastcall璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄦ墍鍋氬伐浣滅殑瑙勫垯鍚屼笂闈㈢殑__cdecl璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨凘@YA鍙樹負@@YI銆?br>3銆丆++緙栬瘧綾誨強鍏舵垚鍛樺嚱鏁版椂鍚嶇О淇グ<br>瀵逛簬瀵煎嚭鐨凜++綾伙紝浠呰兘浣跨敤__cdecl璋冪敤綰﹀畾銆傚湪緙栬瘧鍣ㄧ紪璇戣繃紼嬩腑錛岀紪璇戝櫒浼氬C++綾昏繘琛屽鐞嗐傚錛歝lass __declspec(dllexport) MyClass浼氳澶勭悊涓篶lass MyClass & MyClass::operator=(class MyClass const &)銆傚湪C++緙栬瘧鍣ㄥC++綾昏繘琛屽悕縐頒慨楗扮殑鏃跺欙紝緙栬瘧鍣ㄨ繘琛屼互涓嬪伐浣滐細</p> <p>1錛庝互?鏍囪瘑鍑芥暟鍚嶇殑寮濮嬶紝鍚庤窡?4+綾誨悕錛?br>2錛庣被鍚嶅悗闈㈣窡@@QAE鏍囪瘑錛屽浜庡鍑虹被鏉ヨ榪欐槸鍥哄畾鐨勶紱<br>3錛嶡@QAE鍚庨潰璺烝AV0@ABV0@錛屽嵆寮曠敤綾誨瀷鏍囪瘑絎A+V+0錛堥噸澶嶇殑綾葷殑鏍囪瘑絎︼級+@錛堜笉甯﹀姞鍙鳳級鍜宑onst鎬ц川鐨勫紩鐢ˋB+V+ 0錛堥噸澶嶇殑綾葷殑鏍囪瘑絎︼級+@錛堜笉甯﹀姞鍙鳳級錛?br>4錛庢渶鍚庝互@Z鏍囪瘑鏁翠釜鍚嶅瓧鐨勭粨鏉熴?/p> <p>瀵逛簬瀵煎嚭鐨凜++綾諱腑鐨勬垚鍛樺嚱鏁幫紙闈炴瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟錛夛紝鍙互浣跨敤涓嶅悓鐨勮皟鐢ㄧ害瀹氥傚綋瀵煎嚭鐨凜++綾諱腑鐨勬垚鍛樺嚱鏁頒嬌鐢╛_cdecl璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄨ繘琛屼互涓嬪伐浣滐細</p> <p>1錛庝互?鏍囪瘑鍑芥暟鍚嶇殑寮濮嬶紝鍚庤窡鍑芥暟鍚?@+綾誨悕錛堜笉甯﹀姞鍙鳳級錛?br>2錛庝箣鍚庝互@@QAE鏍囪瘑寮濮嬶紝鍚庤窡榪斿洖鍊煎拰鍙傛暟琛紱<br>3錛庡綋鍑芥暟鐨勮繑鍥炲兼垨鑰呭弬鏁頒笌C++綾繪棤鍏崇殑鏃跺欙紝榪斿洖鍊煎拰鍙傛暟琛ㄤ互涓嬪垪浠e彿琛ㄧず錛?br>B錛歝onst<br>D錛歝har<br>E錛歶nsigned char<br>F錛歴hort<br>G錛歶nsigned short<br>H錛歩nt<br>I錛歶nsigned int<br>J錛歭ong<br>K錛歶nsigned long<br>M錛歠loat<br>N錛歞ouble<br>_N錛歜ool<br>PA錛氭寚閽堬紙*錛屽悗闈㈢殑浠e彿琛ㄦ槑鎸囬拡綾誨瀷錛屽鏋滅浉鍚岀被鍨嬬殑鎸囬拡榪炵畫鍑虹幇錛屼互0<br>浠f浛錛屼竴涓?浠h〃涓嬈¢噸澶嶏級<br>PB錛歝onst鎸囬拡<br>AA錛氬紩鐢紙&錛?br>AB錛歝onst寮曠敤<br>U錛氱被鎴栫粨鏋勪綋<br>V錛欼nterface錛堟帴鍙o級<br>W4錛歟num<br>X錛歷oid<br>4銆丂@QAE鏍囪瘑涔嬪悗绱ц窡鐨勬槸璇ュ嚱鏁扮殑榪斿洖鍊肩被鍨嬶紝鍏跺悗渚濇涓哄弬鏁扮殑鏁版嵁綾誨瀷錛屾寚閽堟爣璇嗗湪鍏舵墍鎸囨暟鎹被鍨嬪墠銆傚綋鍑芥暟鐨勮繑鍥炲兼垨鑰呭弬鏁頒笌C++綾繪棤鍏崇殑鏃跺欙紝鍏跺鐞嗙鍚堟湰鏉¤鍒欙紝鍚﹀垯鎸夌収5銆?瑙勫垯澶勭悊錛?br>5銆佸綋鍑芥暟榪斿洖鍊間負褰撳墠綾繪垨甯︽湁const鎬ц川鐨勫綋鍓嶇被鐨勬椂鍊欙紝榪斿洖鍊肩殑鍛藉悕涓猴細?A鎴?B+V+1+@@錛堜笉甯﹀姞鍙鳳級銆傚綋鍑芥暟榪斿洖鍊間負褰撳墠綾葷殑鎸囬拡/寮曠敤鎴栬呭甫鏈塩onst鎬ц川鐨勫綋鍓嶇被鐨勬寚閽?寮曠敤鐨勬椂鍊欙紝榪斿洖鍊肩殑鍛藉悕涓猴細PA/AA鎴朠B/AB+V+1+@@錛堜笉甯﹀姞鍙鳳級錛?br>6銆佸綋鍑芥暟榪斿洖鍊間負鏌愪釜綾繪垨甯︽湁const鎬ц川鐨勭被鐨勬椂鍊欙紝榪斿洖鍊肩殑鍛藉悕涓猴細?A/?B+V+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級銆傚綋鍑芥暟榪斿洖鍊間負鏌愪釜綾葷殑鎸囬拡/寮曠敤鎴栬呭甫鏈塩onst鎬ц川鐨勭被鐨勬寚閽?寮曠敤鐨勬椂鍊欙紝榪斿洖鍊肩殑鍛藉悕涓猴細PA/AA鎴栬匬B/AB+V+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級錛?br>7銆佸嚱鏁板弬鏁頒負鏌愪釜綾葷殑鏃跺欙紝騫朵笖璇ュ弬鏁版墍浣跨敤鐨勭被鏇劇粡鍑虹幇榪囩殑璇濓紙涔熷氨鏄綋鍓嶈瀵煎嚭鐨勭被銆佷笌鍑芥暟榪斿洖鍊兼墍浣跨敤鐨勭被鐩稿悓鎴栬呬笌鍓嶄竴涓弬鏁頒嬌鐢ㄧ殑綾葷浉鍚岀殑綾伙級錛屽垯璇ュ弬鏁扮被鍨嬫牸寮忎負錛歏+1+@錛堜笉甯﹀姞鍙鳳級銆傚鏋滆鍙傛暟鎵浣跨敤鐨勭被涓嶆槸褰撳墠瑕佸鍑虹殑綾葷殑璇濓紝鍒欒鍙傛暟綾誨瀷鏍煎紡涓猴細V+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級銆傚嚱鏁板弬鏁頒負鏌愪釜綾葷殑鎸囬拡/寮曠敤鎴栬呭甫鏈塩onst鎬ц川鎸囬拡/寮曠敤鐨勬椂鍊欙紝鍒欒鍙傛暟綾誨瀷鏍煎紡鏄湪涓婅堪鏍煎紡鐨勫熀紜涓婂湪V鍓嶉潰鍔犱笂浠h〃鎸囬拡/寮曠敤綾誨瀷鎴栬呭甫鏈塩onst鎬ц川鎸囬拡/寮曠敤綾誨瀷鐨勬爣璇嗙錛圥A/AA鎴朠B/AB錛夛紱<br>8銆佸弬鏁拌〃鍚庝互@Z鏍囪瘑鏁翠釜鍚嶅瓧鐨勭粨鏉燂紝濡傛灉璇ュ嚱鏁版棤鍙傛暟錛屽垯浠鏍囪瘑緇撴潫銆?/p> <p>褰撳嚱鏁頒嬌鐢╛_stdcall璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄦ墍鍋氬伐浣滅殑瑙勫垯鍚屼笂闈㈢殑__cdecl璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨凘@YA鍙樹負@@YG銆?/p> <p>褰撳嚱鏁頒嬌鐢╛_fastcall璋冪敤綰﹀畾鏃訛紝緙栬瘧鍣ㄦ墍鍋氬伐浣滅殑瑙勫垯鍚屼笂闈㈢殑__cdecl璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨凘@YA鍙樹負@@YI銆?br>4銆丆++緙栬瘧瀵煎嚭鏁版嵁鏃跺悕縐頒慨楗?br>瀵逛簬瀵煎嚭鐨勬暟鎹紝浠呬嬌鐢╛_cdecl璋冪敤綰﹀畾銆傚湪C++緙栬瘧鍣ㄥC++綾昏繘琛屽悕縐頒慨楗扮殑鏃跺欙紝緙栬瘧鍣ㄨ繘琛屼互涓嬪伐浣滐細</p> <p>1錛庝互?鏍囪瘑鏁版嵁鐨勫紑濮嬶紝鍚庤窡鏁版嵁鍚嶏紱<br>2錛庢暟鎹悕鍚庨潰浠@3鏍囪瘑寮濮嬶紝鍚庤窡鏁版嵁綾誨瀷錛?br>3錛庡綋鏁版嵁綾誨瀷涓嶤++綾繪棤鍏崇殑鏃跺欙紝鏁版嵁綾誨瀷浠ヤ笅鍒椾唬鍙瘋〃紺猴細<br>B錛歝onst<br>D錛歝har<br>E錛歶nsigned char<br>F錛歴hort<br>G錛歶nsigned short<br>H錛歩nt<br>I錛歶nsigned int<br>J錛歭ong<br>K錛歶nsigned long<br>M錛歠loat<br>N錛歞ouble<br>_N錛歜ool<br>PA錛氭寚閽堬紙*錛屽悗闈㈢殑浠e彿琛ㄦ槑鎸囬拡綾誨瀷錛屽鏋滅浉鍚岀被鍨嬬殑鎸囬拡榪炵畫鍑虹幇錛屼互0<br>浠f浛錛屼竴涓?浠h〃涓嬈¢噸澶嶏級<br>PB錛歝onst鎸囬拡<br>AA錛氬紩鐢紙&錛?br>AB錛歝onst寮曠敤<br>U錛氱被鎴栫粨鏋勪綋<br>V錛欼nterface錛堟帴鍙o級<br>W4錛歟num<br>X錛歷oid<br>4錛庡鏋滄暟鎹被鍨嬫槸鏌愪釜綾葷殑鏃跺欙紝鏁版嵁綾誨瀷鐨勫懡鍚嶄負錛歏+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級銆傚綋鏁版嵁綾誨瀷涓哄綋鍓嶇被鐨勬寚閽?寮曠敤鎴栬呭甫鏈塩onst鎬ц川鐨勫綋鍓嶇被鐨勬寚閽?寮曠敤鐨勬椂鍊欙紝鏁版嵁綾誨瀷鐨勫懡鍚嶄負錛歅A/AA鎴朠B/AB+V+綾誨悕+@@錛堜笉甯﹀姞鍙鳳級錛?br>5錛庢渶鍚庯紝濡傛灉鏁版嵁綾誨瀷鏄痗onst鎬ц川錛屽垯淇グ鍚嶄互B緇撳熬銆傚鏋滄暟鎹被鍨嬫槸闈瀋onst鎬ц川錛屽垯淇グ鍚嶄互A緇撳熬銆?br></p> </div> </td> </tr> </tbody> </table> </p> <img src ="http://m.shnenglu.com/amyvmiwei/aggbug/40169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/amyvmiwei/" target="_blank">灝忎笉鐐?/a> 2008-01-01 15:33 <a href="http://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40169.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Lib 闈欐侀摼鎺ュ簱http://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40164.html灝忎笉鐐?/dc:creator>灝忎笉鐐?/author>Tue, 01 Jan 2008 07:02:00 GMThttp://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40164.htmlhttp://m.shnenglu.com/amyvmiwei/comments/40164.htmlhttp://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40164.html#Feedback0http://m.shnenglu.com/amyvmiwei/comments/commentRss/40164.htmlhttp://m.shnenglu.com/amyvmiwei/services/trackbacks/40164.html
// TestLib01.h
#ifndef TESTLIB_H
#define TESTLIB_H
//澹版槑鍑芥暟涓篊緙栬瘧錛岃繛鎺ユ柟寮忕殑澶栭儴鍑芥暟
extern "C" int Add(int numa, int numb);
#endif


//TestLib01.cpp
#incldue "TestLib01.h"
int Add(int numa, int numb)
{
      return (numa + numb);
}

緙栬瘧寰楀埌涓涓?lib鐨勯潤鎬佸簱錛屾妸.lib鏂囦歡浠ュ強澶存枃浠禩estLib01.h鎷瘋礉鍒扮敤鎴峰伐紼嬬洰褰曚笅闈紙涓や釜鏂囦歡閮芥斁鍦ㄥ伐紼嬬洰褰曚笅闈紝涓嶇敤鍚ib鏂囦歡鏀懼湪debug涓嬮潰錛夈?br>
涓嬮潰鏉ヤ竴涓敤鎴風▼搴忔潵嫻嬭瘯涓涓?br>//TestLibProject
//Test.cpp

#include <iostream>
#include <"TestLib01.h">

using namespace std;

#pragma comment(lib,"TestLib01.lib")
int main()
{
      cout << Add(1, 4) << endl; 
      return 0;
}

浠g爜涓?pragma comment( lib , TestLib01.lib" )鐨勬剰鎬濇槸鎸囨湰鏂囦歡鐢熸垚鐨?obj鏂囦歡搴斾笌TestLib01.lib涓璧瘋繛鎺ャ?/strong>



]]>
DLL錛堝姩鎬侀摼鎺ュ簱錛夌紪紼?錛堟璁猴級http://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40157.html灝忎笉鐐?/dc:creator>灝忎笉鐐?/author>Tue, 01 Jan 2008 06:35:00 GMThttp://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40157.htmlhttp://m.shnenglu.com/amyvmiwei/comments/40157.htmlhttp://m.shnenglu.com/amyvmiwei/archive/2008/01/01/40157.html#Feedback0http://m.shnenglu.com/amyvmiwei/comments/commentRss/40157.htmlhttp://m.shnenglu.com/amyvmiwei/services/trackbacks/40157.html

dll鏄幇鍦ㄥ父瑙佺殑鏂囦歡錛屽畠闆嗘垚浜嗙▼搴忕殑寰堝鍔熻兘鍦ㄩ噷闈€備竴鑸儏鍐典笅錛屽畠涓嶈兘鐩存帴琚墽琛岋紝甯歌鐨勪嬌鐢ㄦ柟娉曟槸鐢ㄥ叾浠栫殑*.exe璋冪敤鍏舵墽琛岋紝浠ヤ嬌鍏跺唴閮ㄥ姛鑳借〃鐜板嚭鏉ャ傝繕鏈?.ocx鏂囦歡涔熶笌涔嬬被浼鹼紝涔熷氨鏄漢浠父璇寸殑com
1.綆瑕?br>
         Windows API涓墍鏈夌殑鍑芥暟閮藉寘鍚湪dll涓紝鍏朵腑鏈?/span>3涓渶閲嶈鐨?/span>DLL銆?br>        (1)   Kernel32.dll
        瀹冨寘鍚偅浜涚敤浜庣鐞嗗唴瀛樸佽繘紼嬪拰綰跨▼鐨勫嚱鏁幫紝渚嬪CreateThread鍑芥暟錛?br>        (2)   User32.dll
       瀹冨寘鍚偅浜涚敤浜庢墽琛岀敤鎴風晫闈換鍔?/span>(濡傜獥鍙g殑鍒涘緩鍜屾秷鎭殑浼犻?/span>)鐨勫嚱鏁幫紝渚嬪CreateWindow鍑芥暟錛?br>        (3)   GDI32.dll
       瀹冨寘鍚偅浜涚敤浜庣敾鍥懼拰鏄劇ず鏂囨湰鐨勫嚱鏁般?br>2.      闈欐佸簱鍜屽姩鎬佸簱
(1)   闈欐佸簱
           鍑芥暟鍜屾暟鎹緙栬瘧榪涗竴涓簩榪涘埗鏂囦歡(閫氬父鎵╁睍鍚嶄負.LIB)銆傚湪浣跨敤闈欐佸簱鐨勬儏鍐典笅錛屽湪緙栬瘧閾炬帴鍙墽琛屾枃浠舵椂錛岄摼鎺ュ櫒浠庡簱涓鍒惰繖浜涘嚱鏁板拰鏁版嵁騫舵妸瀹冧滑鍜屽簲鐢ㄧ▼搴忕殑鍏朵粬妯″潡緇勫悎璧鋒潵鍒涘緩鏈緇堢殑鍙墽琛屾枃浠?/span>(.Exe鏂囦歡).褰撳彂甯冧駭鍝佹椂錛屽彧闇瑕佸彂甯冭繖涓彲鎵ц鏂囦歡錛屽茍涓嶉渶瑕佸彂甯冭浣跨敤鐨勯潤鎬佸簱銆?br>(2)   鍔ㄦ佸簱
        鍦ㄤ嬌鐢ㄥ姩鎬佸簱鐨勬椂鍊欙紝寰寰鎻愪緵涓や釜鏂囦歡錛氫竴涓紩鍏ュ簱(.lib)鏂囦歡鍜屼竴涓?/span>DLL(.dll)鏂囦歡銆傝櫧鐒跺紩鍏ュ簱鐨勫悗緙鍚嶄篃鏄?/span>”lib”錛屼絾鏄姩鎬佸簱鐨勫紩鍏ュ簱鏂囦歡鍜岄潤鎬佸簱鏂囦歡鏈夌潃鏈川涓婄殑鍖哄埆錛屽涓涓?/span>DLL鏉ヨ錛屽叾寮曞叆搴撴枃浠?/span>(.lib)鍖呭惈璇?/span>DLL瀵煎嚭鐨勫嚱鏁板拰鍙橀噺鐨勭鍙峰悕錛岃?/span>.dll鏂囦歡鍖呭惈璇?/span>DLL瀹為檯鐨勫嚱鏁板拰鏁版嵁銆傚湪浣跨敤鍔ㄦ佸簱鐨勬儏鍐典笅錛屽湪緙栬瘧閾炬帴鍙墽琛屾枃浠舵椂錛屽彧闇瑕侀摼鎺ヨDLL鐨勫紩鍏ュ簱鏂囦歡錛岃DLL涓殑鍑芥暟浠g爜鍜屾暟鎹茍涓嶅鍒跺埌鍙墽琛屾枃浠朵腑錛岀洿鍒板彲鎵ц紼嬪簭榪愯鏃訛紝鎵嶅幓鍔犺澆鎵闇鐨?/span>DLL錛屽皢璇?/span>DLL鏄犲皠鍒拌繘紼嬬殑鍦板潃絀洪棿澶栵紝鐒跺悗璁塊棶DLL涓鍑虹殑鍑芥暟銆傝繖鏃訛紝鍙戝竷浜у搧鏃訛紝闄や簡鍙戝竷鍙墽琛屾枃浠朵互澶栵紝鍚屾椂榪樿鍙戝竷璇ョ▼搴忓皢瑕佽皟鐢ㄧ殑鍔ㄦ侀摼鎺ュ簱銆?br>3.      鍦ㄥ鍑哄簱澶存枃浠朵腑鐨勬爣鍑嗗啓娉曪細
#ifdef LIBDAQ_EXPORTS
#define LIBDAQ_API __declspec(dllexport)
#else
#define LIBDAQ_API __declspec(dllimport)
#endif
     灝嗚澶存枃浠舵坊鍔犲埌鏌愬鎴蜂唬鐮佷腑鏃訛紝浼氳嚜鍔ㄥ睍寮銆傚鏋滃鎴蜂唬鐮佹病鏈夊畾涔?/span>LIBDAQ_EXPORTS錛岄偅涔?/span>LIBDAQ_EXPORTS浼氳瀹氫箟涓?/span>__declspec(dllimport)琛ㄧず鏈?/span>LIBDAQ_EXPORTS澶寸殑鍑芥暟閮芥槸浠庤DLL涓鍏ョ殑銆?br>4.      鍚嶅瓧鏀圭紪鍜?/span>”extern “C””
           C++緙栬瘧鍣ㄥ湪鐢熸垚DLL鏃訛紝浼氬瀵煎嚭鐨勫嚱鏁拌繘琛屽悕瀛楁敼緙栵紝騫朵笖涓嶅悓鐨勭紪璇戝櫒浣跨敤鐨勬敼鍙樿鍒欎笉涓鏍鳳紝鍥犳鏀圭紪鍚庣殑鍚嶅瓧浼氫笉涓鏍楓傝繖鏍鳳紝濡傛灉鍒╃敤涓嶅悓鐨勭紪璇戝櫒鍒嗗埆鐢熸垚DLL鍜岃闂DLL鐨勫鎴風浠g爜紼嬪簭鐨勮瘽錛屽悗鑰呭湪璁塊棶璇?/span>DLL鐨勫鍑哄嚱鏁版椂浼氬嚭鐜伴棶棰樸備負浜嗗疄鐜伴氱敤鎬э紝闇瑕佸姞涓婇檺瀹氱錛?/span>extern “C”銆?br>           浣嗘槸鍒╃敤闄愬畾絎?/span>extern “C”鍙互瑙e喅C++鍜?/span>C涔嬮棿鐩鎬簰璋冪敤鏃跺嚱鏁板懡鍚嶇殑闂錛屼絾鏄繖縐嶆柟娉曟湁涓涓己闄鳳紝灝辨槸涓嶈兘鐢ㄤ簬瀵煎嚭涓涓被鐨勬垚鍛樺嚱鏁幫紝鍙兘鐢ㄤ簬瀵煎嚭鍏ㄥ眬鍑芥暟銆?br>5.      鏄劇ず鍔犺澆鏂瑰紡鍔犺澆DLL
           浣跨敤鍔ㄦ佹柟寮忔潵鍔犺澆鍔ㄦ侀摼鎺ュ簱鏃訛紝闇瑕佺敤鍒?/span>LoadLibrary鍑芥暟銆傝鍑芥暟鐨勪綔鐢ㄥ氨鏄皢鎸囧畾鐨勫彲鎵ц妯″潡鏄犲皠鍒拌皟鐢ㄨ繘紼嬬殑鍦板潃絀洪棿銆傝皟鐢ㄥ師鍨嬩負錛?br>HMODULE LoadLibrary(LPCTSTR lpFileName);
           LoadLibrary鍑芥暟涓嶄粎鍙互鍔犺澆DLL錛岃繕鍙互鍔犺澆鍙墽琛屾ā鍧?/span>(Exe)銆傚綋鍔犺澆鍙墽琛屾ā鍧楁椂錛屼富瑕佹槸涓轟簡璁塊棶璇ユā鍧楀唴鐨勪竴浜涜祫婧愶紝渚嬪瀵硅瘽妗嗚祫婧愩佷綅鍥捐祫婧愭垨鍥炬爣璧勬簮絳夈?/span>LoadLibrary鍑芥暟鏈変竴涓瓧絎︿覆綾誨瀷(LPCTSTR)鐨勫弬鏁幫紝璇ュ弬鏁版寚瀹氫簡鍙墽琛屾ā鍧楃殑鍚嶇О錛屾棦鍙互鏄竴涓?/span>dll鏂囦歡錛屼篃鍙互鏄竴涓?/span>exe鏂囦歡銆傚鏋滆皟鐢ㄦ垚鍔燂紝LoadLibrary鍑芥暟灝嗚繑鍥炴墍鍔犺澆鐨勯偅涓ā鍧楃殑鍙ユ焺銆傝繑鍥炵被鍨?/span>HMODULE鍜?/span>HINSTANCE鍙互閫氱敤銆?br>           褰撳姞杞藉埌鍔ㄦ侀摼鎺ュ簱妯″潡鐨勫彞鏌勫悗錛屾帴涓嬫潵灝辮鎯沖姙娉曡幏鍙栬鍔ㄦ侀摼鎺ュ簱涓鍑哄嚱鏁扮殑鍦板潃錛岃繖鍙互閫氳繃璋冪敤GetProcAddress鍑芥暟鏉ュ疄鐜般傝鍑芥暟鐢ㄦ潵鑾峰彇DLL瀵煎嚭鍑芥暟鐨勫湴鍧錛屽叾鍘熷瀷澹版槑濡備笅鎵紺猴細
FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
鍙傛暟hModule錛氭寚瀹氬姩鎬侀摼鎺ュ簱妯″潡鐨勫彞鏌勶紝鍗?/span>LoadLibrary鍑芥暟鐨勮繑鍥炲箋?br>鍙傛暟lpProcName錛氫竴涓寚鍚戝父閲忕殑瀛楃鎸囬拡錛屾寚瀹?/span>DLL瀵煎嚭鍑芥暟鐨勫悕瀛楁垨鍑芥暟鐨勫簭鍙楓傚鏋滄槸搴忓彿錛屽垯搴忓彿蹇呴』鍦ㄤ綆浣嶅瓧鑺備腑錛岄珮浣嶅瓧鑺傚繀欏繪槸0銆?br>濡傛灉璋冪敤鎴愬姛錛?/span>GetProcAddress鍑芥暟灝嗚繑鍥炴寚瀹氬鍑哄嚱鏁扮殑鍦板潃錛涘惁鍒欒繑鍥?/span>NULL銆?br>渚嬪錛?br>HINSTANCE hInst;
hInst = LoadLibrary(“DllTest.dll”);
typedef int (*ADDPROC)(int a, int b);
ADDPROC add = (ADDPROC)GetProcAddress(hInst, “add”);
if (!add)
print(“Failure”);
else
process next events
FreeLibrary(hInst);
璋冪敤璇硶錛?br>BOOL FreeLibrary(HMODULE hModule);
6.      鍔犺澆DLL鐨勪袱縐嶆柟寮忎紭緙虹偣錛?br>       閲囩敤鍔ㄦ佸姞杞芥柟寮忥紝閭d箞鍙互鍦ㄩ渶瑕佹椂鎵嶅姞杞?/span>DLL錛岃岄殣寮忛摼鎺ユ柟寮忓疄鐜拌搗鏉ユ瘮杈冪畝鍗曪紝鍦ㄧ紪鍐欏鎴風浠g爜鏃跺氨鍙互鎶婇摼鎺ュ伐浣滃仛濂斤紝鍦ㄧ▼搴忎腑鍙互闅忔椂璋冪敤DLL瀵煎嚭鐨勫嚱鏁般備絾鏄鏋滅▼搴忛渶瑕佽闂崄澶氫釜DLL鏃訛紝濡傛灉閮介噰鐢ㄩ殣寮忛摼鎺ユ柟寮忓姞杞藉畠浠殑璇濓紝閭d箞鍦ㄨ紼嬪簭鍚姩鏃訛紝榪欎簺DLL閮介渶瑕佽鍔犺澆鍒板唴瀛樹腑錛屽茍鏄犲皠鍒拌皟鐢ㄨ繘紼嬬殑鍦板潃絀洪棿錛岃繖鏍峰皢鍔犲ぇ紼嬪簭鐨勫惎鍔ㄦ椂闂淬傝屼笖涓鑸潵璇達紝鍦ㄧ▼搴忚繍琛岃繃紼嬩腑鍙槸鍦ㄦ煇涓潯浠舵弧瓚蟲椂鎵嶉渶瑕佽闂煇涓?/span>DLL涓殑鏌愪釜鍑芥暟錛屽叾瀹冩儏鍐典笅閮戒笉闇瑕佽闂繖浜?/span>DLL涓殑鍑芥暟銆備絾鏄繖鏃舵墍鏈夌殑DLL閮藉凡緇忚鍔犺澆鍒板唴瀛樹腑錛岃祫婧愭氮璐規槸姣旇緝涓ラ噸鐨勩傝繖涓椂鍊欏氨闇瑕侀噰鐢ㄦ樉紺哄姞杞界殑鏂瑰紡鏉ヨ闂?/span>DLL錛屽湪闇瑕佹椂鎵嶅姞杞芥墍闇鐨?/span>DLL銆備篃灝辨槸璇村湪闇瑕佹椂鎵嶈鍔犺澆鍒板唴瀛樹腑錛屽茍琚槧灝勫埌璋冪敤榪涚▼鐨勫湴鍧鎺т歡涓傞渶瑕佽鏄庣殑鏄紝闅愬紡閾炬帴鏂瑰紡璁塊棶DLL鏃訛紝鍦ㄧ▼搴忓惎鍔ㄦ椂涔熸槸閫氳繃LoadLibrary鍑芥暟鍔犺澆璇ヨ繘紼嬮渶瑕佺殑鍔ㄦ侀摼鎺ュ簱鐨勩?br>7.      DllMain鍑芥暟
           濡傛灉鎻愪緵浜?/span>DllMain鍑芥暟(璇ュ嚱鏁版槸鍙互閫夋嫨瀛樺湪鐨?/span>)錛岄偅涔堝湪姝ゅ嚱鏁頒腑涓嶈榪涜澶鏉傜殑璋冪敤銆傚洜涓哄湪鍔犺澆璇ュ姩鎬侀摼鎺ュ簱鏃訛紝鍙兘榪樻湁涓浜涙牳蹇冨姩鎬侀摼鎺ュ簱娌℃湁琚姞杞姐備緥濡?/span>Use32.dll鎴?/span>GDI32.dll銆傛垜浠嚜宸辯紪鍐欑殑DLL浼氭瘮杈冮潬鍓嶅湴琚姞杞姐?br>

8.     銆俤ef鐨勫簲鐢?br>         鍦ㄤ笉鍚岃璦闂磋皟鐢ㄧ害瀹氱殑涓嶅悓錛岀敋鑷蟲湁鐨勭紪璇戝櫒瀵瑰悕瀛楃殑淇グ涔熶笉鏄畬鍏ㄧ浉鍚岋紝鎵浠ワ紝瑕佷嬌DLL鑳藉箍娉涘簲鐢ㄥ姞涓婁竴涓?def鏂囦歡銆?br> 


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二视频| 欧美国产日韩视频| 亚洲电影第1页| 国产午夜精品理论片a级探花| 欧美日韩精品一区视频| 欧美日韩国产精品专区| 欧美性色综合| 国产乱肥老妇国产一区二| 国产精品午夜在线观看| 国产精品永久入口久久久| 国产日韩精品视频一区二区三区| 国产综合亚洲精品一区二| 一区二区三区在线观看国产| 尤物在线精品| 亚洲免费观看高清在线观看| 99在线热播精品免费99热| 亚洲欧美日韩一区在线| 久久久999精品| 亚洲高清视频在线| 欧美激情第三页| 日韩视频久久| 久久爱www久久做| 欧美aⅴ99久久黑人专区| 欧美日韩在线亚洲一区蜜芽| 国产在线视频欧美| 日韩午夜免费视频| 欧美中文日韩| 亚洲欧洲日本mm| 午夜亚洲性色视频| 欧美成人精品在线播放| 国产精品私人影院| 亚洲毛片在线免费观看| 久久精品夜色噜噜亚洲a∨ | 欧美另类videos死尸| 国产精品高潮视频| 亚洲国产精品一区二区久| 亚洲一区二区伦理| 亚洲国产91| 久久精品卡一| 国产精品美女黄网| 一本色道久久综合亚洲精品不卡 | 欧美激情在线狂野欧美精品| 亚洲免费伊人电影在线观看av| 久久亚洲影音av资源网| 国产美女一区| 亚洲欧美中文另类| 日韩一级精品视频在线观看| 美女主播视频一区| 依依成人综合视频| 久久亚洲风情| 午夜精品一区二区三区在线播放| 欧美日韩少妇| 欧美va亚洲va国产综合| 一区二区三区高清在线| 欧美成人蜜桃| 91久久精品美女高潮| 老司机67194精品线观看| 亚洲女人av| 国产精品免费小视频| 亚洲男人第一网站| 一区二区欧美在线观看| 欧美日韩视频免费播放| 一本色道久久综合精品竹菊 | 久久综合国产精品| 久久成人免费电影| 韩国一区二区在线观看| 久久全球大尺度高清视频| 亚洲欧美日韩国产一区二区三区| 欧美视频精品在线| 亚洲欧美制服另类日韩| 亚洲欧美日韩国产成人精品影院| 国产精品综合久久久| 久久激情久久| 久久久久青草大香线综合精品| 黑人巨大精品欧美一区二区小视频| 久久精品日韩欧美| 久久这里只精品最新地址| 亚洲国产成人一区| 亚洲美女精品一区| 国产精品任我爽爆在线播放| 久久精品一级爱片| 欧美刺激午夜性久久久久久久| 日韩视频一区二区| 亚洲先锋成人| 激情懂色av一区av二区av| 欧美激情按摩| 欧美性大战久久久久久久| 欧美在线首页| 久久影视三级福利片| 日韩性生活视频| 亚洲男人av电影| 亚洲国产精品999| 99精品国产一区二区青青牛奶| 国产精品女主播在线观看| 久久午夜视频| 欧美日韩直播| 美女免费视频一区| 欧美视频一区二区三区在线观看| 久久成人18免费网站| 免费在线一区二区| 性欧美精品高清| 欧美va天堂在线| 小嫩嫩精品导航| 欧美成人精品高清在线播放| 午夜精品理论片| 欧美a级大片| 久久久久久久久久久久久久一区 | 国产视频久久久久久久| 亚洲电影在线观看| aa亚洲婷婷| 在线免费观看欧美| 亚洲一区二区三区中文字幕| 亚洲国产精品久久久久久女王| 亚洲视频一区在线| 亚洲精品系列| 久久精品国产亚洲一区二区三区| 一区二区三区欧美成人| 久久久九九九九| 欧美一区1区三区3区公司| 欧美高清视频一区二区三区在线观看| 亚洲欧美在线高清| 欧美日韩小视频| 最新国产乱人伦偷精品免费网站| 国产精品网站在线| 99精品久久久| 亚洲毛片视频| 欧美福利在线| 美女精品一区| 国产一区二区三区在线观看网站 | 最新国产成人在线观看| 亚洲第一二三四五区| 欧美在线www| 午夜综合激情| 国产精品国产三级国产专播精品人 | 日韩一二三区视频| 99国产精品久久| 欧美二区不卡| 亚洲国产经典视频| 最新国产成人av网站网址麻豆| 久久福利视频导航| 久久久久在线| 国产综合久久久久影院| 亚洲欧美韩国| 校园春色综合网| 一区二区在线视频播放| 在线午夜精品自拍| 99精品视频免费观看| 模特精品在线| 亚洲日本免费| 日韩视频一区二区三区| 欧美国产视频日韩| 亚洲精品欧美精品| 国产精品99久久久久久人| 欧美日韩国产在线一区| 一本久道久久久| 亚洲欧美在线x视频| 国产亚洲精品久久久| 久久精品亚洲乱码伦伦中文| 老司机aⅴ在线精品导航| 亚洲国产色一区| 欧美日韩美女一区二区| 亚洲一本大道在线| 久久综合网络一区二区| 亚洲看片网站| 国产精品女同互慰在线看| 亚洲另类自拍| 亚洲国产婷婷| 欧美日韩精品一区视频 | 亚洲国产欧美在线| 中文日韩欧美| 国产一区二区三区久久精品| 久久久久一区二区| 亚洲精品一区二区在线观看| 欧美一区二区三区喷汁尤物| 亚洲高清在线| 国产精品大片wwwwww| 久久精品中文字幕免费mv| 亚洲日本aⅴ片在线观看香蕉| 午夜在线观看欧美| 亚洲精选视频在线| 国产麻豆日韩| 欧美日本高清| 久久精品人人做人人爽电影蜜月 | 久久久久一区| 亚洲图片欧美日产| 欧美国产精品v| 香蕉国产精品偷在线观看不卡| 精品51国产黑色丝袜高跟鞋| 欧美日韩久久精品| 久久婷婷国产综合精品青草| 亚洲午夜电影网| 亚洲精品久久久久久久久| 久久久久久电影| 亚洲欧美不卡| 99精品视频一区| 亚洲高清av| 在线播放中文一区| 国产日产精品一区二区三区四区的观看方式 | 欧美日韩一区二| 蜜桃久久av一区|