锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av成人片在线观看,噜噜噜亚洲色成人网站∨,色久悠悠婷婷综合在线亚洲http://www.tkk7.com/huyi2006/category/27011.html 鍋氫竴涓湁鎬濇兂鐨勪漢zh-cnSun, 11 May 2008 23:30:22 GMTSun, 11 May 2008 23:30:22 GMT60鍦╒C6.0涓嬌鐢╯qlite鏁版嵁搴?/title><link>http://www.tkk7.com/huyi2006/articles/199720.html</link><dc:creator>鑳℃剰</dc:creator><author>鑳℃剰</author><pubDate>Sat, 10 May 2008 08:21:00 GMT</pubDate><guid>http://www.tkk7.com/huyi2006/articles/199720.html</guid><wfw:comment>http://www.tkk7.com/huyi2006/comments/199720.html</wfw:comment><comments>http://www.tkk7.com/huyi2006/articles/199720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huyi2006/comments/commentRss/199720.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huyi2006/services/trackbacks/199720.html</trackback:ping><description><![CDATA[ <p>鍦╯qlite.org 涓婁笅杞藉緱鍒癢indows鐗堟湰鐨剆qlite,瀹冩槸浠qlitedll.zip鏂囦歡鎻愪緵鐨?鍏朵腑鏈塻qlite3.def鍜?sqlite3.dll鏂囦歡,褰撶劧鍙互鐩存帴閫氳繃LoadLibrary絳塛IN32API鏉ユ搷浣渄ll,鏌ユ壘鍏朵腑鍖呭惈鐨勫嚱鏁?騫朵嬌鐢ㄨ繖浜涘嚱鏁?浣嗘槸涓鑸兘 涓嶈繖涔堝仛,鍘熷洜寰堢畝鍗?榪欐牱澶夯鐑?鎵浠ヤ竴鑸厛浣跨敤LIB鍛戒護鐢熸垚鐢ㄤ簬閾炬帴鐨刲ib,鐒跺悗鎶妔qlite澶存枃浠秙qlite3.h鍖呭惈榪涚▼搴忎腑,<br />榪欐牱鐩存帴璋冪敤 sqlite鐨凙PI灝辨柟渚垮浜?褰撶劧sqlite3.h鏂囦歡寰椾粠sqlite婧愪唬鐮侊紙浠qlite-source-3_3_4.zip鏂囦歡鎻愪緵錛変腑鎼炲埌,鍦ㄦ簮鐮佷腑sqlite3.h榪欎釜澶存枃浠舵槸sqlite3.h.in瀛樺湪鐨勶紝瑙e帇鍑烘潵鏀規垚sqlite.h灝卞彲浠ヤ簡. <br />浣跨敤VC++鐨凩IB鍛戒護鏈変互涓嬫楠わ細 <br />錛?錛夎緗甐C98涓璍IB.exe鎵鍦ㄧ殑璺緞錛?<br />D:\MyDoc\db\capi>set path=%path%;"D:\Program Files\Microsoft Visual Studio\VC98\Bin" <br />(2)鐢熸垚SQLite鐨刲ib鏂囦歡錛?<br />D:\MyDoc\db\capi>LIB /DEF:SQLITE3.DEF /MACHINE:IX86 </p> <p>Microsoft (R) Library Manager Version 6.00.8168 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. Creating library SQLITE.lib and object SQLITE.exp <br />聽 榪欐牱灝辨垚鍔熷湴鍒涘緩浜嗗湪WIN32紼嬪簭涓闂畇qlite鎵闇瑕佺殑搴?鍙互鐢ㄤ簬閾炬帴WIN32紼嬪簭. <br />聽聽聽 鍒版鎵鏈変嬌鐢╯qlite鐨勫噯澶囧伐浣滃凡鍛婄絼.鐜板湪鍦∕SVC6涓柊寤轟竴涓猈in32 Console Application宸ョ▼,鎶妔qlite.dll,sqlite.h鍜宻qlite.lib鏂囦歡澶嶅埗鍒板伐紼嬫枃浠跺す涓?鎶妔qlite.h鏂囦歡鍔犲叆鍒伴」 鐩腑,鐒跺悗鍦≒roject Setting鐨凩ink涓殑瀵硅薄搴撴ā鍧椾腑澧炲姞sqlite.lib鏂囦歡. 鎴栬卲roject->add to project->files錛岄夋嫨榪欎釜lib鏂囦歡<br />鐒跺悗淇敼鍔犲叆濡備笅浠g爜鍗沖彲: </p> <p>#include <IOSTREAM><br />#include <STRING><br />#include <SSTREAM><br />#include <stdio.h><br />#include "sqlite3.h"</p> <p>using namespace std;</p> <p>sqlite3* pDB;</p> <p>int createTable()<br />{<br />聽 char* errMsg;<br />聽 std::string dropTab="drop table test_tab;";<br />聽 string strSQL= "create table test_tab (f1 int, f2 long, f3 varchar(20));";<br />聽 int res = sqlite3_exec(pDB,dropTab.c_str(),0,0, &errMsg);<br />聽 if (res != SQLITE_OK)<br />聽 {<br />聽聽 std::cout << "鎵цSQL 鍑洪敊." << errMsg << std::endl;<br />聽聽 //return -1;<br />聽 } </p> <p>聽 res = sqlite3_exec(pDB,strSQL.c_str(),0,0, &errMsg);</p> <p>聽 if (res != SQLITE_OK)<br />聽 {<br />聽聽聽 std::cout << "鎵ц鍒涘緩table鐨凷QL 鍑洪敊." << errMsg << std::endl;<br />聽聽聽 return -1;<br />聽 }<br />聽 else<br />聽 {<br />聽聽聽聽聽 std::cout << "鍒涘緩table鐨凷QL鎴愬姛鎵ц."<< std::endl;<br />聽 }</p> <p>聽 return 0;<br />}</p> <p>int insert1()<br />{<br />聽 char* errMsg;</p> <p>聽 int res = sqlite3_exec(pDB,"begin transaction;",0,0, &errMsg);</p> <p>聽 for (int i= 1; i < 100; ++i)<br />聽 {<br />聽聽聽 std::stringstream strsql;<br />聽聽聽 strsql << "insert into test_tab聽 values(";<br />聽聽聽 strsql聽 << i << ","<< (i+10) <<",'huyi'"<< ");";<br />聽聽聽 std::string str = strsql.str();<br />聽聽聽 cout << str <<endl;<br />聽聽聽 res = sqlite3_exec(pDB,str.c_str(),0,0, &errMsg);<br />聽聽聽 if (res != SQLITE_OK)<br />聽聽聽 {<br />聽聽聽聽聽 std::cout << "鎵цSQL 鍑洪敊." << errMsg << std::endl;<br />聽聽聽聽聽 return -1;<br />聽聽聽 }<br />聽 }<br />聽 res = sqlite3_exec(pDB,"commit transaction;",0,0, &errMsg);<br />聽 std::cout << "SQL鎴愬姛鎵ц."<< std::endl;<br />聽 return 0; <br />}</p> <p> <br />int select1()<br />{<br />聽 char* errMsg;<br />聽int nrow = 0, ncolumn = 0;<br />聽char **azResult; //浜岀淮鏁扮粍瀛樻斁緇撴灉<br />聽 string strSQL= "select * from test_tab;";<br />聽聽聽聽 /*<br />聽 int res = sqlite3_exec(pDB,strSQL.c_str(),0,0, &errMsg);</p> <p>聽 if (res != SQLITE_OK)<br />聽 {<br />聽聽聽 std::cout << "鎵цSQL 鍑洪敊." << errMsg << std::endl;<br />聽聽聽 return -1;<br />聽 }<br />聽 else<br />聽 {<br />聽聽聽聽聽聽 std::cout << "SQL鎴愬姛鎵ц."<< std::endl;<br />聽 }<br />聽 */<br />聽 sqlite3_get_table(pDB, strSQL.c_str(), &azResult, &nrow, &ncolumn, &errMsg);<br />聽聽聽聽 int i = 0;<br />聽 for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )<br />聽 {<br />聽聽 if (i>0 && i%ncolumn==0)<br />聽聽聽 printf("\n");<br />聽聽聽聽聽 printf( "%s ",azResult[i]);<br />聽 }<br />聽聽聽聽聽聽聽聽 printf("\n");<br />聽 //閲婃斁鎺?azResult 鐨勫唴瀛樼┖闂?br />聽 sqlite3_free_table( azResult );<br />聽 sqlite3_close(pDB); //鍏抽棴鏁版嵁搴?br />聽 return 0;<br />}</p> <p>int main(int argc, char* argv[])<br />{<br />聽 if (argc < 2)<br />聽 {<br />聽聽聽 std::cout << "璇瘋緭鍏ュ懡浠よ鍙傛暟錛歴qlite鏁版嵁搴撳悕." << std::endl;<br />聽聽聽 return 0;<br />聽 }</p> <p>聽 int res = sqlite3_open(argv[1], &pDB);</p> <p>聽 if( res ){<br />聽聽聽 std::cout << "Can't open database: "<< sqlite3_errmsg(pDB);<br />聽聽聽 sqlite3_close(pDB);<br />聽聽聽 return -1;<br />聽 }<br />聽 res = createTable();<br />聽 if (res != 0)<br />聽 {<br />聽聽聽聽聽 return 0;<br />聽 }<br />聽 res = insert1();<br />聽 if (res != 0)<br />聽 {<br />聽聽聽聽聽 return 0;<br />聽 }<br />聽 select1();<br />聽聽 return 0;<br />}<br /></p> <img src ="http://www.tkk7.com/huyi2006/aggbug/199720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huyi2006/" target="_blank">鑳℃剰</a> 2008-05-10 16:21 <a href="http://www.tkk7.com/huyi2006/articles/199720.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>dll鍩虹http://www.tkk7.com/huyi2006/articles/180170.html鑳℃剰鑳℃剰Sat, 16 Feb 2008 04:06:00 GMThttp://www.tkk7.com/huyi2006/articles/180170.htmlhttp://www.tkk7.com/huyi2006/comments/180170.htmlhttp://www.tkk7.com/huyi2006/articles/180170.html#Feedback0http://www.tkk7.com/huyi2006/comments/commentRss/180170.htmlhttp://www.tkk7.com/huyi2006/services/trackbacks/180170.html鑷粠寰蔣鎺ㄥ嚭絎竴涓増鏈殑Windows鎿嶄綔緋葷粺浠ユ潵錛屽姩鎬侀摼鎺ュ簱錛圖LL錛変竴鐩存槸Wind
ows鎿嶄綔緋葷粺鐨勫熀紜銆?
鍔ㄦ侀摼鎺ュ簱閫氬父閮戒笉鑳界洿鎺ヨ繍琛岋紝涔熶笉鑳芥帴鏀舵秷鎭傚畠浠槸涓浜涚嫭绔嬬殑鏂囦歡錛屽叾涓?
鍖呭惈鑳借鍙墽琛岀▼搴忔垨鍏跺畠DLL璋冪敤鏉ュ畬鎴愭煇欏瑰伐浣滅殑鍑芥暟銆傚彧鏈夊湪鍏跺畠妯″潡璋冪敤鍔?
鎬侀摼鎺ュ簱涓殑鍑芥暟鏃訛紝瀹冩墠鍙戞尌浣滅敤銆?
Windows API涓殑鎵鏈夊嚱鏁伴兘鍖呭惈鍦―LL涓傚叾涓湁3涓渶閲嶈鐨凞LL錛孠ernel32.dll
錛屽畠鍖呭惈鐢ㄤ簬綆$悊鍐呭瓨銆佽繘紼嬪拰綰跨▼鐨勫悇涓嚱鏁幫紱User32.dll錛屽畠鍖呭惈鐢ㄤ簬鎵ц鐢?
鎴風晫闈換鍔★紙濡傜獥鍙g殑鍒涘緩鍜屾秷鎭殑浼犻侊級鐨勫悇涓嚱鏁幫紱GDI32.dll錛屽畠鍖呭惈鐢ㄤ簬鐢?
鍥懼拰鏄劇ず鏂囨湰鐨勫悇涓嚱鏁般?
聽聽聽聽聽聽聽聽聽聽聽闈欐佸簱鍜屽姩鎬佸簱
闈欐佸簱錛氬嚱鏁板拰鏁版嵁琚紪璇戣繘涓涓簩榪涘埗鏂囦歡(閫氬父鎵╁睍鍚嶄負.LIB)銆傚湪浣跨敤闈欐佸簱
鐨勬儏鍐典笅錛屽湪緙栬瘧閾炬帴鍙墽琛屾枃浠舵椂錛岄摼鎺ュ櫒浠庡簱涓鍒惰繖浜涘嚱鏁板拰鏁版嵁騫舵妸瀹冧滑
鍜屽簲鐢ㄧ▼搴忕殑鍏跺畠妯″潡緇勫悎璧鋒潵鍒涘緩鏈緇堢殑鍙墽琛屾枃浠?.EXE鏂囦歡)銆?
鍦ㄤ嬌鐢ㄥ姩鎬佸簱鐨勬椂鍊欙紝寰寰鎻愪緵涓や釜鏂囦歡錛氫竴涓紩鍏ュ簱鍜屼竴涓狣LL銆傚紩鍏ュ簱鍖呭惈琚獶
LL瀵煎嚭鐨勫嚱鏁板拰鍙橀噺鐨勭鍙峰悕錛孌LL鍖呭惈瀹為檯鐨勫嚱鏁板拰鏁版嵁銆傚湪緙栬瘧閾炬帴鍙墽琛屾枃浠?
鏃訛紝鍙渶瑕侀摼鎺ュ紩鍏ュ簱錛孌LL涓殑鍑芥暟浠g爜鍜屾暟鎹茍涓嶅鍒跺埌鍙墽琛屾枃浠朵腑錛屽湪榪愯
鐨勬椂鍊欙紝鍐嶅幓鍔犺澆DLL錛岃闂瓺LL涓鍑虹殑鍑芥暟銆?
浣跨敤鍔ㄦ侀摼鎺ュ簱鐨勫ソ澶?
鍙互閲囩敤澶氱緙栫▼璇█鏉ョ紪鍐欍?
澧炲己浜у搧鐨勫姛鑳姐?
鎻愪緵浜屾寮鍙戠殑騫沖彴銆?
綆鍖栭」鐩鐞嗐?
鍙互鑺傜渷紓佺洏絀洪棿鍜屽唴瀛樸?
鏈夊姪浜庤祫婧愮殑鍏變韓銆?
鏈夊姪浜庡疄鐜板簲鐢ㄧ▼搴忕殑鏈湴鍖栥?
鍔ㄦ侀摼鎺ュ簱琚涓繘紼嬭闂?
鍔ㄦ侀摼鎺ュ簱鍔犺澆鐨勪袱縐嶆柟寮?
棰勫鐭ヨ瘑
錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細
錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細
錛氾細錛氾細
榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿錛?
聽鍦?2涓虹郴緇熶腑錛岀郴緇熶負娌′釜榪涚▼鍒嗛厤2^32鐨勫湴鍧絀洪棿
鍏蜂綋鍙弬鐪嬨妛indows鏍稿績緙栫▼銆?
棰勫鐞嗗懡浠わ細
娌℃湁浠涔堝彲浠ヨ鐨勪簡
鐪嬬湅浠g爜灝辨槑鐧戒簡錛侊紒
鐜鍙橀噺錛氾紙鐜鍙橀噺鐨勬蹇墊垜灝變笉浠嬬粛浜嗭紝鍏蜂綋鐨勫彲浠ュ弬鐪媤indows 鏍稿績緙栫▼錛?
涓婇潰鏈夊緢璇︾粏鐨勮鏄庯級鎶奃LL鏀懼埌褰撳墠浠繪剰鐨勭幆澧冨彉閲忎腑灝卞彲浠ュ姞杞?
瀹氫箟鍑芥暟鎸囬拡
鏍煎紡錛歵ypedef 聽int (*proc)(int a,int b);
娉ㄦ剰錛歱roc鏄竴涓嚱鏁版寚閽堢被鍨嬭屼笉鏄竴涓彉閲?
鐒跺悗鎴戜滑鍙互鐢ㄨ繖涓寚閽堢被鍨嬪幓瀹氫箟鍙橀噺
Proc myproc;榪欓噷鐨刴yproc灝辨槸涓涓寚閽堝彉閲?
瑕佹槸瀹炲湪鏃犺亰 鍐呭績絀鴻櫄 娌′簨鍙仛鐨勮瘽 鍙互鍘昏繖涓綉绔欑湅鐪嬪嚱鏁扮殑鎸囬拡http://uf
o.tyedu.com/study/programmer/language_C/200412/1472.html 聽
鍑芥暟鐨勮皟鐢ㄧ害瀹氾紙鍙互涓嶅繀浜嗚В錛屼絾鏄悊瑙e悗鍙互璁╀綘鐞嗚ВDLL鐨勮皟鐢ㄦ洿涓烘繁鍒伙級
鍑芥暟鐨勮皟鐢ㄧ害瀹氾細鍑芥暟璋冪敤綰﹀畾鏄嚱鏁拌皟鐢ㄨ呭拰琚皟鐢ㄧ殑鍑芥暟浣撲箣闂村叧浜庡弬鏁頒紶閫?
銆佽繑鍥炲間紶閫掋佸爢鏍堟竻闄ゃ佸瘎瀛樺櫒浣跨敤鐨勪竴縐嶇害瀹?
聽聽聽瀹冩槸闇瑕佷簩榪涘埗綰у埆鍏煎鐨勫己綰﹀畾,鍑芥暟璋冪敤鑰呭拰鍑芥暟浣撳鏋滀嬌鐢ㄤ笉鍚岀殑璋冪敤綰?
瀹?灝嗗彲鑳介犳垚紼嬪簭鎵ц閿欒,蹇呴』鎶婂畠鐪嬩綔鏄嚱鏁板0鏄庣殑涓閮ㄥ垎;
甯歌鐨勫嚱鏁拌皟鐢ㄧ害瀹氾細
VC6涓殑鍑芥暟璋冪敤綰﹀畾錛?
聽聽聽聽聽聽聽璋冪敤綰﹀畾 聽聽聽聽聽聽聽鍫嗘爤娓呴櫎 聽聽聽鍙傛暟浼犻?
聽聽聽聽聽聽聽__cdecl 聽聽聽聽聽聽聽聽璋冪敤鑰?聽聽聽聽聽浠庡彸鍒板乏,閫氳繃鍫嗘爤浼犻?
聽聽聽聽聽聽聽__stdcall 聽聽聽聽聽聽鍑芥暟浣?聽聽聽聽聽浠庡彸鍒板乏,閫氳繃鍫嗘爤浼犻?
聽聽聽聽聽聽聽__fastcall 聽聽聽聽聽鍑芥暟浣?聽聽聽聽聽浠庡彸鍒板乏,浼樺厛浣跨敤瀵勫瓨鍣?ECX,EDX),鐒跺悗
浣跨敤鍫嗘爤
聽聽聽聽聽聽聽thiscall 聽聽聽聽聽聽聽鍑芥暟浣?聽聽聽聽聽this鎸囬拡榛樿閫氳繃ECX浼犻?鍏跺畠鍙傛暟浠庡彸
鍒板乏鍏ユ爤
__cdecl鏄疌\C++鐨勯粯璁よ皟鐢ㄧ害瀹? VC鐨勮皟鐢ㄧ害瀹氫腑騫舵病鏈塼hiscall榪欎釜鍏抽敭瀛?瀹冩槸
綾繪垚鍛樺嚱鏁伴粯璁よ皟鐢ㄧ害瀹?
C\C++涓殑main(鎴杦main)鍑芥暟鐨勮皟鐢ㄧ害瀹氬繀欏繪槸__cdecl,涓嶅厑璁告洿鏀?
榛樿璋冪敤綰﹀畾涓鑸兘澶熼氳繃緙栬瘧鍣ㄨ緗繘琛屾洿鏀?濡傛灉浣犵殑浠g爜渚濊禆浜庤皟鐢ㄧ害瀹?璇?
鏄庣‘鎸囧嚭闇瑕佷嬌鐢ㄧ殑璋冪敤綰﹀畾;
甯歌鐨勫嚱鏁拌皟鐢ㄧ害瀹氫腑,鍙湁cdecl綰﹀畾闇瑕佽皟鐢ㄨ呮潵娓呴櫎鍫嗘爤;
C\C++涓殑鍑芥暟鏀寔鍙傛暟鏁扮洰涓嶅畾鐨勫弬鏁板垪琛?姣斿printf鍑芥暟;鐢變簬鍑芥暟浣撲笉鐭ラ亾璋?
鐢ㄨ呭湪鍫嗘爤涓帇鍏ヤ簡澶氬皯鍙傛暟,
鎵浠ュ嚱鏁頒綋涓嶈兘鏂逛究鐨勭煡閬撳簲璇ユ庢牱娓呴櫎鍫嗘爤,閭d箞鏈濂界殑鍔炴硶灝辨槸鎶婃竻闄ゅ爢鏍堢殑璐?
浠諱氦緇欒皟鐢ㄨ?
榪欏簲璇ュ氨鏄痗decl璋冪敤綰﹀畾瀛樺湪鐨勫師鍥犲惂;
VB涓鑸嬌鐢ㄧ殑鏄痵tdcall璋冪敤綰﹀畾;(ps錛氭湁鏇村己鐨勪繚璇佸悧)
Windows鐨凙PI涓?涓鑸嬌鐢ㄧ殑鏄痵tdcall綰﹀畾;(ps: 鏈夋洿寮虹殑淇濊瘉鍚?
寤鴻鍦ㄤ笉鍚岃璦闂寸殑璋冪敤涓?濡侱LL)鏈濂介噰鐢╯tdcall璋冪敤綰﹀畾,鍥犱負瀹冨湪璇█闂村吋瀹?
鎬ф敮鎸佹渶濂?
涓?鍑芥暟榪斿洖鍊間紶閫掓柟寮?
聽聽鍏跺疄錛岃繑鍥炲肩殑浼犻掍粠澶勭悊涓婁篃鍙互鎯寵薄涓哄嚱鏁拌皟鐢ㄧ殑涓涓猳ut褰㈠弬鏁幫紱 鍑芥暟榪?
鍥炲間紶閫掓柟寮忎篃鏄嚱鏁拌皟鐢ㄧ害瀹氱殑涓閮ㄥ垎錛?
聽聽鏈夎繑鍥炲肩殑鍑芥暟榪斿洖鏃訛細涓鑸琲nt銆佹寚閽堢瓑32bit鏁版嵁鍊?鍖呮嫭32bit緇撴瀯)閫氳繃ea
x浼犻掞紝(bool,char閫氳繃al浼犻掞紝short閫氳繃 ax浼犻?,鐗瑰埆鐨刜_int64絳?4bit緇撴瀯(
struct) 閫氳繃edx,eax涓や釜瀵勫瓨鍣ㄦ潵浼犻?鍚岀悊錛?2bit鏁村艦鍦?6bit鐜涓氳繃dx,a
x浼犻?; 鍏朵粬澶у皬鐨勭粨鏋?struct)榪斿洖鏃舵妸鍏跺湴鍧閫氳繃eax榪斿洖錛?鎵浠ヨ繑鍥炲肩被鍨?
涓嶆槸1,2,4,8byte鏃訛紝鏁堢巼鍙兘姣旇緝宸?
聽聽鍙傛暟鍜岃繑鍥炲間紶閫掍腑錛屽紩鐢ㄦ柟寮忕殑綾誨瀷鍙互鐪嬩綔涓庝紶閫掓寚閽堟柟寮忕浉鍚岋紱
聽聽float\double(鍖呮嫭Delphi涓殑extended)閮芥槸閫氳繃嫻偣瀵勫瓨鍣╯t(0)榪斿洖錛?

鍏蜂綋鐨勫垎鏋愬弬鐪嬶細http://blog.csdn.net/avalonbbs/archive/2004/12/25/229300
.aspx
錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細
錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細錛氾細
錛氾細錛氾細錛氾細錛?




闅愬紡閾炬帴
鏈枃鐜板湪瀵歸殣寮忛摼鎺ヤ笉浣滃叿浣撶殑璇存槑錛屽彧鏄仛涓涓ぇ姒傜殑浠嬬粛錛堜笅嬈″啀鍋氬叿浣撶殑璇?
鏄庯級.褰撹繘紼嬭繍琛岀殑鏃跺欙紝鎵鏈夌殑鐩稿叧鐨凞LL閮借鍔犺澆鍒板唴瀛橈紝鐒跺悗鏄犲皠鍒拌繘紼嬬殑鍦?
鍧絀洪棿錛屽綋涓涓繘紼嬭璋冪敤寰堝涓狣LL鐨勬椂鍊欙紝榪欑鏂規硶灝辨樉寰楃壒鍒氮璐瑰唴瀛橈紝鎵浠?
鍦ㄥ姞杞藉緢澶氫釜DLL鐨勬椂鍊欙紝鏈濂界敤鏄劇ず鍔犺澆鐨勬柟寮?
鍦ㄨ皟鐢―LL閲岄潰鐨勫嚱鏁版椂鍊?
瑕佺敤extern 澹版槑鏄閮ㄥ彉閲?
姣斿 extern int add(int num1,int num2);
浣嗘槸榪樺簲璇ユ敞鎰忕殑灝辨槸錛氬湪緙栬瘧DLL鏃訛紝瑕佹妸緙栬瘧鐨凩IB鏂囦歡鏀懼埌鎵ц鏂囦歡鐨勭洰褰曚笅
錛屽茍涓斿湪緙栬瘧鎵ц鏂囦歡鐨勬椂鍊欒榪炴帴LIB鏂囦歡銆?
鍦ㄥ啓DLL鐨勬椂鍊欒瀵煎嚭鐨勫嚱鏁頒篃灝辨槸鍦ㄨ兘琚閮ㄧ▼搴忚皟鐢ㄧ殑鍑芥暟鍓嶉潰鍔犱笂
涓鑸ぇ鍨嬮」鐩湪寮鍙慏LL涓紝瑕佽繘琛岄瀹氫箟澹版槑鐨?

錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳
錛濓紳
鍦ㄥ畾涔塂LL鐨勬椂鍊欒瀹氫箟瀵煎嚭鍑芥暟灝辮鍦ㄨ鍑芥暟鍓嶉潰鍔燺_declspec(DLLexport)鏃訛紝
C++緙栬瘧鍣ㄤ負浜嗘敮鎸佸嚱鏁扮殑閲嶈澆浼氳繘琛屽嚱鏁板悕瀛楁敼緙栵紝褰撳彲鎵ц妯″潡鎵ц璇ュ嚱鏁版椂鐢?
浜庢壘涓嶅埌璇ュ嚱鏁扮殑鍚嶅瓧錛屼簬鏄皟鐢ㄥ氨浼氬嚭鐜伴敊璇紒褰撲嬌鐢╡xtern 鈥淐鈥濇椂灝卞彲浠ュ憡
璇夌紪璇戝櫒涓嶅繀淇敼鍑芥暟鍚嶅拰鍙橀噺鍚嶃傝繖鏍峰氨鍙互鐢–++鎴朇緙栬瘧鍣ㄧ▼搴忚皟鐢ㄨ鍑芥暟銆?

浠ヤ笂鎿嶄綔鍙湁鍦╒C++鍒涘緩鐨勭殑鍙墽琛屾ā鍧楁潵璋冪敤璇LL錛屽鏋滀嬌鐢ㄥ叾浠栫殑緙栬瘧鍣ㄧ殑妯?
鍧楁潵璋冪敤璇LL錛屽氨闇瑕佹墽琛屼竴浜涢澶栫殑鎿嶄綔銆?
C緙栬瘧鍦ㄨ繘琛岀紪璇戠殑鏃跺欎篃浼氳繘琛屽悕瀛楃殑鏀圭紪錛屽綋鍑芥暟浣跨敤_stdcall(WINAPI)璋冪敤
瑙勫垯鏃訛紝MS緙栬瘧鍣ㄥ氨浼氭敼緙栧嚱鏁扮殑鍚嶇О銆?
姣斿錛歘_declspec(DLLexport) 聽LONG __stdcall 聽Proc(int a ,int b);
緙栬瘧鍣ㄤ細鏀圭紪涓篲_Proc@8
鍥犳 褰撻潪C++鎴栭潪C緙栬瘧鍣ㄨ皟鐢ㄨDLL涓殑鍑芥暟Proc鏃訛紝灝變細鍑虹幇鎵句笉鍒板嚱鏁扮殑鎯呭喌
銆?
榪欐牱鎴戜滑灝卞彲浠ュ畾涔塂EF鏂囦歡鏉ヨВ鍐籌紝騫朵笖鍦―EF鏂囦歡鍔犱笂涓嬮潰鐨凟XPORTS錛?
EXPORTS
聽聽聽聽聽聽聽Proc
Def妯″潡鎵ц鍘熺悊錛氬綋榪炴帴紼嬪簭鍒嗘瀽榪欎釜DEF鏂囦歡鏃訛紝瀹冨彂鐜癙roc鍜宊_Proc@8閮借杈?
鍑猴紝鐢變簬榪欎袱涓嚱鏁版槸鐩鎬簰鍖歸厤鐨勶紝鍥犳榪炴帴紼嬪簭浣跨敤Proc鏉ヨ緭鍑鴻鍑芥暟錛屾牴鏈笉
浣跨敤__Proc@8鏉ヨ緭鍑哄嚱鏁板悕
錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳
錛濓紳錛?

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽




涓嬮潰鏄痙ef鐨勫叿浣撲嬌鐢ㄦ柟娉?

------------------------------------------------------------------------
----------------------------------------------妯″潡瀹氫箟鏂囦歡(.DEF)鏄竴涓垨
澶氫釜鐢ㄤ簬鎻忚堪DLL灞炴х殑妯″潡璇彞緇勬垚鐨勬枃鏈枃浠訛紝姣忎釜DEF鏂囦歡鑷沖皯蹇呴』鍖呭惈浠ヤ笅
妯″潡瀹氫箟璇彞錛?
* 絎竴涓鍙ュ繀欏繪槸LIBRARY璇彞錛屾寚鍑篋LL鐨勫悕瀛楋紱
* EXPORTS璇彞鍒楀嚭琚鍑哄嚱鏁扮殑鍚嶅瓧錛涘皢瑕佽緭鍑虹殑鍑芥暟淇グ鍚嶇綏鍒楀湪EXPORTS涔嬩笅
錛岃繖
涓悕瀛楀繀欏諱笌瀹氫箟鍑芥暟鐨勫悕瀛楀畬鍏ㄤ竴鑷達紝濡傛灝卞緱鍒頒竴涓病鏈変換浣曚慨楗扮殑鍑芥暟鍚嶄簡
銆?
* 鍙互浣跨敤DESCRIPTION璇彞鎻忚堪DLL鐨勭敤閫?姝ゅ彞鍙?錛?
* ";"瀵逛竴琛岃繘琛屾敞閲?鍙?銆?
------------------------------------------------------------------------
----------------------------------------------


////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
dlltest.h
#ifdef DLL1_API
#else
#define DLL1_API extern "C" _declspec(dllimport)
#endif

DLL1_API int _stdcall add(int a,int b);
DLL1_API int _stdcall subtract(int a,int b);
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////


\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\//
dlltest.cpp
#define DLL1_API extern "C" _declspec(dllexport)
#include "Dll1.h"
#include <stdio.h>
int _stdcall add(int a,int b)
{
聽聽聽聽return a+b;
}

int _stdcall subtract(int a,int b)
{
聽聽聽聽return a-b;
}
\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// def鏂囦歡
LIBRARY dlltest
EXPORTS
add
subtract
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////

鏈変簡涓婇潰鐨勯偅浜涙枃浠朵箣鍚庡氨鍙互鍦ㄥ浣曞湴鏂硅皟鐢ㄨ繖浜涘嚱鏁頒簡

void CDllTestDlg::OnBtnSubtract()
{
聽聽聽聽// TODO: Add your control notification handler code here
聽聽聽聽CString str;
聽聽聽聽str.Format("5-3=%d",subtract(5,3));
聽聽聽聽MessageBox(str);
}

void CDllTestDlg::OnBtnOutput()
{
聽聽聽聽// TODO: Add your control notification handler code here
聽聽聽聽Point pt;
聽聽聽聽pt.output(5,3);
}涓嬮潰鍏蜂綋浠嬬粛鏄劇ず鍔犺澆
鏄劇ず鍔犺澆
VC++緙栬瘧鍣ㄥ湪緙栬瘧DLL鐨勬椂鍊欏嚱鏁頒細鍙戠敓鍚嶅瓧鏀圭紪錛涗富瑕佸湪闈濩++鐜涓氨涓嶈兘璇嗗埆
璇ュ嚱鏁頒簡錛屾墍浠ヨ繖閲屽簲璇ュ畾涔夋ā鍧楁枃浠剁被鍨婦EF錛屼富瑕佸氨鏂逛究浜嗛潪C++紼嬪簭鍙互璋冪敤
璇LL閲岄潰鐨勫嚱鏁?
鍐嶄嬌鐢ㄦ樉紺哄姞杞藉墠蹇呴』瑕佹敞鎰忕殑鏄悕瀛楃殑鏀圭紪闂錛屽洜涓哄啀鍔ㄦ佸姞杞戒腑鍚嶅瓧鏀圭紪鍚?
鍦ㄥ姞杞藉氨寰椾笉鍘熸潵鐨勫嚱鏁板悕瀛椾簡錛岃繖鏍峰姞杞藉氨浼氬け璐ャ備絾鏄彲浠ョ敤鍙﹀涓縐嶆柟娉曞姞
杞斤細MSDN涓婂GetProAddress涓殑絎簩涓弬鏁版槸榪欐牱璇存槑鐨凱ointer to a null-ter
minated string that specifies the function or variable name, or the func
tion's ordinal value.涔熷氨鏄鍙互浣跨敤鍑芥暟鐨勫簭鍙鋒潵璋冪敤璇ュ嚱鏁幫紝鍏蜂綋浣跨敤鏂規硶
鏄疨rocAdd = (MYPROC) GetProcAddress(hinstLib, MakeIntResource(i)); (i浠h〃
鍑芥暟鍦―LL涓殑搴忓彿錛屽彲浠ョ敤DUMPBIN宸ュ叿鏌ョ湅)錛屼絾鏄竴鑸殑閮戒笉鐢ㄨ繖縐嶈漿鎹㈠簭鍙風殑
鏂瑰紡鏉ュ彇寰楀嚱鏁扮殑鍦板潃錛屽洜涓鴻繖鏍烽潪甯哥殑涓嶇洿瑙傦紒涓嬮潰灝辯敤妯″潡瀹氫箟鏂囦歡錛圖EF錛夋潵
閬垮厤DLL涓嚱鏁扮殑鍚嶅瓧鐨勬敼緙栭棶棰?





鏄劇ず鍔犺澆DLL
//MSDN涓婄殑瀵笵LL榪涚▼鏄劇ず鍔犺澆鐨凞EMO
Using Run-Time Dynamic Linking
You can use the same DLL in both load-time and run-time dynamic linking.
The following example uses the LoadLibrary function to get a handle to
the Myputs DLL (see Creating a Simple Dynamic-Link Library). If LoadLibr
ary succeeds, the program uses the returned handle in the GetProcAddress
function to get the address of the DLL's myPuts function. After calling
the DLL function, the program calls the FreeLibrary function to unload
the DLL.
Because the program uses run-time dynamic linking, it is not necessary t
o link the module with an import library for the DLL.
This example illustrates an important difference between run-time and lo
ad-time dynamic linking. If the DLL is not available, the application us
ing load-time dynamic linking must simply terminate. The run-time dynami
c linking example, however, can respond to the error.
// A simple program that uses LoadLibrary and
// GetProcAddress to access myPuts from Myputs.dll.

#include <stdio.h>
#include <windows.h>
typedef int (*MYPROC)(LPTSTR);
VOID main(VOID)
{
聽聽聽HINSTANCE hinstLib;
聽聽聽MYPROC ProcAdd;
聽聽聽BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
聽// Get a handle to the DLL module.
hinstLib = LoadLibrary(TEXT("DllTest"));
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
聽聽聽{
聽聽聽聽聽聽聽ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("Proc"));
// If the function address is valid, call the function.
聽if (NULL != ProcAdd)
聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽fRunTimeLinkSuccess = TRUE;
聽聽聽聽聽聽聽聽聽聽聽(ProcAdd) (TEXT("Message via DLL function\n"));
聽聽聽聽聽聽聽}
聽// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
聽聽聽}
聽// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
聽聽聽聽聽聽printf("Message via alternative method\n");
}

瀵逛互涓婄殑鍑犱釜鍑芥暟浣滀竴浜涘繀瑕佺殑璇存槑錛?
LoadLibrary錛氬姞杞芥寚瀹氱殑DLL錛屽姞杞芥柟寮忔槸鍏堝湪褰撳墠鐩綍涓煡鎵撅紝濡傛灉鎵句笉鍒板啀鍐?
鐜鍙橀噺鐩綍涓嬫煡鎵撅紱
榪樻槸鐪婱SDN涓婄殑璇存槑
The LoadLibrary function maps the specified executable module into the a
ddress space of the calling process.
HMODULE LoadLibrary(
聽LPCTSTR lpFileName
);
Parameters
lpFileName
[in] Pointer to a null-terminated string that names the executable modul
e (either a .dll or .exe file). The name specified is the file name of t
he module and is not related to the name stored in the library module it
self, as specified by the LIBRARY keyword in the module-definition (.def
) file.

GetProcAddress錛氭槸鍙栧緱宸茬煡鐨凞LL涓殑鍑芥暟錛岃繑鍥炴寚瀹氬嚱鏁扮殑鍦板潃
MSDN涓婄殑璇存槑
This function returns the address of the specified exported DLL function
.
FARPROC GetProcAddress(
聽HMODULE hModule,
聽LPCWSTR lpProcName
);
Parameters
hModule
[in] Handle to the DLL module that contains the function.
The LoadLibrary or GetModuleHandle function returns this handle.
lpProcName
[out] Pointer to a null-terminated string containing the function name,
or specifies the function's ordinal value.
If this parameter is an ordinal value, it must be in the low-order word;
the high-order word must be zero.
The lpProcName parameter must be in Unicode.
Remark:
The GetProcAddress function is used to retrieve addresses of exported fu
nctions in DLLs.
The spelling and case of the function name pointed to by lpProcName must
be identical to that in the EXPORTS statement of the source DLL's modul
e-definition (.def) file.
The exported names of Win32 APIs might differ from the names you use whe
n calling these functions in your code. This difference is hidden by mac
ros used in the SDK header files.

鑳℃剰 2008-02-16 12:06 鍙戣〃璇勮
]]>
鍒犻櫎windows鏈嶅姟http://www.tkk7.com/huyi2006/articles/168603.html鑳℃剰鑳℃剰Tue, 18 Dec 2007 14:45:00 GMThttp://www.tkk7.com/huyi2006/articles/168603.htmlhttp://www.tkk7.com/huyi2006/comments/168603.htmlhttp://www.tkk7.com/huyi2006/articles/168603.html#Feedback0http://www.tkk7.com/huyi2006/comments/commentRss/168603.htmlhttp://www.tkk7.com/huyi2006/services/trackbacks/168603.html

鍒犻櫎鐨勫姙娉曟湁涓や釜錛?/p>

鍔炴硶涓錛?鐢╯c.exe榪欎釜Windows鍛戒護
聽聽聽聽聽聽聽聽 寮濮嬧斺旇繍琛屸斺攃md.exe錛岀劧鍚庤緭鍏c灝卞彲浠ョ湅鍒頒簡銆備嬌鐢ㄥ姙娉曞緢綆鍗曪細
聽聽聽聽聽聽聽聽 sc delete "鏈嶅姟鍚?聽聽 (濡傛灉 琛?灞戞簡閿屽喘鐦?鎵樻灠 鏄傝牴鍙?鐗?br />聽聽聽聽聽聽聽聽聽 濡傞拡瀵逛笂闈㈢殑錛?sc delete KSD2Service

鏂規硶浜岋細鐩存帴榪涜娉ㄥ唽琛ㄧ紪杈戯紙涓嶆帹鑽愶級
聽聽聽聽聽聽 鎵撳紑娉ㄥ唽琛ㄧ紪杈戝櫒錛屾壘鍒頒笅闈㈢殑閿鹼細
聽聽聽聽聽聽 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services聽聽 涓鑸湇鍔′細浠ョ浉鍚岀殑鍚嶅瓧鍦ㄨ繖閲屾樉紺轟竴涓富鍋ワ紝鐩存帴鍒犻櫎鐩稿叧鐨勯敭鍊間究鍙?/p>

鐗規畩鎯呭喌

聽聽聽聽聽 1銆佸鏋滄湇鍔℃樉紺虹殑鏄痳undll32.exe錛屽茍涓旇繖涓枃浠舵槸浣嶄簬system32鐩綍涓嬶紝閭d箞灝變笉鑳藉垹闄よ繖涓猺undll32.exe鏂囦歡錛屽畠鏄疻indows緋葷粺鐨勬枃浠躲傝繖鏃跺彧瑕佹竻闄ょ浉鍏崇殑鏈嶅姟灝卞彲浠ヤ簡

聽聽聽聽聽聽 2銆佸鏋滀竴涓湇鍔″垹闄や簡椹笂鍙堣嚜鍔ㄥ緩绔嬩簡錛岃鏄庡悗鍙版湁榪涚▼鍦ㄧ洃瑙嗐佷繚鎶ゃ傞渶瑕佸厛鍦ㄨ繘紼嬬鐞嗗櫒涓潃鎺夌浉搴旂殑榪涚▼錛屾垨鑰呭惎鍔ㄥ悗鎸塅8錛屽埌瀹夊叏妯″紡涓嬪垹闄?/p>



鑳℃剰 2007-12-18 22:45 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 99热精品在线免费观看| 两个人日本WWW免费版| 免费a级毛片高清视频不卡| 亚洲精品亚洲人成在线观看麻豆 | 日本高清在线免费| 久久久久亚洲av无码专区| 67pao强力打造高清免费| 亚洲国产成人超福利久久精品| 91福利免费视频| 亚洲AV无码国产精品色| 我要看免费的毛片| 国产精品亚洲综合天堂夜夜| 又大又硬又爽免费视频| 国产精品高清免费网站| 久久亚洲国产伦理| 91成人免费在线视频| 亚洲国产成人手机在线观看| 四虎精品亚洲一区二区三区| 久久er国产精品免费观看8| 亚洲AV无码成人专区片在线观看| 中国人xxxxx69免费视频| 亚洲另类自拍丝袜第五页| 亚洲国产成人久久笫一页| 精品国产一区二区三区免费| 亚洲免费在线观看视频| 国产伦精品一区二区三区免费迷| 五月天婷婷免费视频| 久久精品亚洲精品国产色婷| 好吊妞在线新免费视频| 一级做a爱片特黄在线观看免费看| 亚洲爆乳无码一区二区三区| 中文字幕无码免费久久99| 女人裸身j部免费视频无遮挡| 亚洲av日韩av高潮潮喷无码| 亚洲精品tv久久久久| 中文字幕免费在线观看动作大片| 一区二区三区亚洲| 亚洲国产精品一区二区九九| 91香蕉国产线观看免费全集| 黄人成a动漫片免费网站| 亚洲日本va午夜中文字幕一区|