




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
VC++動(dòng)態(tài)鏈接庫(DLL)編程深入淺出(一)概論先來闡述一下DLL(DynamicLinkableLibrary)的概念,你可以簡單的把DLL看成一種倉庫,它提供給你一些可以直接拿來用的變量、函數(shù)或類。在倉庫的發(fā)展史上經(jīng)歷了“無庫一靜態(tài)鏈接庫一動(dòng)態(tài)鏈接庫”的時(shí)代。靜態(tài)鏈接庫與動(dòng)態(tài)鏈接庫都是共享代碼的方式,如果采用靜態(tài)鏈接庫,則無論你愿不愿意,lib中的指令都被直接包含在最終生成的EXE文件中了。但是若使用DLL,該DLL不必被包含在最終EXE文件中,EXE文件執(zhí)行時(shí)可以“動(dòng)態(tài)”地引用和卸載這個(gè)與EXE獨(dú)立的DLL文件。靜態(tài)鏈接庫和動(dòng)態(tài)鏈接庫的另外一個(gè)區(qū)別在于靜態(tài)鏈接庫中不能再包含其他的動(dòng)態(tài)鏈接庫或者靜態(tài)庫,而在動(dòng)態(tài)鏈接庫中還可以再包含其他的動(dòng)態(tài)或靜態(tài)鏈接庫。對(duì)動(dòng)態(tài)鏈接庫,我們還需建立如下概念:DLL的編制與具體的編程語言及編譯器無關(guān)只要遵循約定的DLL接口規(guī)范和調(diào)用方式,用各種語言編寫的DLL都可以相互調(diào)用。譬如Windows提供的系統(tǒng)DLL(其中包括了Windows的API),在任何開發(fā)環(huán)境中都能被調(diào)用,不在乎其是VisualBasic、VisualC++還是Delphi。動(dòng)態(tài)鏈接庫隨處可見我們?cè)赪indows目錄下的system32文件夾中會(huì)看到kernel32.dll、user32.dll和gdi32.dll,windows的大多數(shù)API都包含在這些DLL中。kernel32.dll中的函數(shù)主要處理內(nèi)存管理和進(jìn)程調(diào)度;user32.dll中的函數(shù)主要控制用戶界面;gdi32.dll中的函數(shù)則負(fù)責(zé)圖形方面的操作。一般的程序員都用過類似MessageBox的函數(shù),其實(shí)它就包含在user32.dll這個(gè)動(dòng)態(tài)鏈接庫中。由此可見DLL對(duì)我們來說其實(shí)并不陌生。VC動(dòng)態(tài)鏈接庫的分類VisualC++支持三種DLL,它們分別是Non-MFCDLL(非MFC動(dòng)態(tài)庫)、MFCRegularDLL(MFC規(guī)則DLL)、MFCExtensionDLL(MFC擴(kuò)展DLL)。非MFC動(dòng)態(tài)庫不采用MFC類庫結(jié)構(gòu),其導(dǎo)出函數(shù)為標(biāo)準(zhǔn)的C接口,能被非MFC或MFC編寫的應(yīng)用程序所調(diào)用;MFC規(guī)則DLL包含一個(gè)繼承自CWinApp的類,但其無消息循環(huán);MFC擴(kuò)展DLL采用MFC的動(dòng)態(tài)鏈接版本創(chuàng)建,它只能被用MFC類庫所編寫的應(yīng)用程序所調(diào)用。由于本文篇幅較長,內(nèi)容較多,勢(shì)必需要先對(duì)閱讀本文的有關(guān)事項(xiàng)進(jìn)行說明,下面以問答形式給出。問:本文主要講解什么內(nèi)容?答:本文詳細(xì)介紹了DLL編程的方方面面,努力學(xué)完本文應(yīng)可以對(duì)DLL有較全面的掌握,并能編寫大多數(shù)DLL程序。問:如何看本文?答:本文每一個(gè)主題的講解都附帶了源代碼例程,可以隨文下載(每個(gè)工程都經(jīng)WINRAR壓縮)。所有這些例程都由筆者編寫并在VC++6.0中調(diào)試通過。當(dāng)然看懂本文不是讀者的最終目的,讀者應(yīng)親自動(dòng)手實(shí)踐才能真正掌握DLL的奧妙。問:學(xué)習(xí)本文需要什么樣的基礎(chǔ)知識(shí)?答:如果你掌握了C,并大致掌握了C++,了解一點(diǎn)MFC的知識(shí),就可以輕松地看懂本文。靜態(tài)鏈接庫對(duì)靜態(tài)鏈接庫的講解不是本文的重點(diǎn),但是在具體講解DLL之前,通過一個(gè)靜態(tài)鏈接庫的例子可以快速地幫助我們建立“庫”的概念。圖1建立一個(gè)靜態(tài)鏈接庫如圖1,在VC++6.0中new—個(gè)名稱為libTest的staticlibrary工程(單擊此處下載本工程附件),并新建lib.h和lib.cpp兩個(gè)文件,lib.h和lib.cpp的源代碼如下://文件:lib.h#ifndefLIB_H#defineLIB_Hextern"C"intadd(intx,inty); //聲明為C編譯、連接方式的外部函數(shù)#endif//文件:lib.cpp#include"lib.h"intadd(intx,inty){returnx+y;}編譯這個(gè)工程就得到了一個(gè).lib文件,這個(gè)文件就是一個(gè)函數(shù)庫,它提供了add的功能。將頭文件和.lib文件提交給用戶后,用戶就可以直接使用其中的add函數(shù)了。標(biāo)準(zhǔn)TurboC2.0中的C庫函數(shù)(我們用來的scanf、printf、memcpy、strcpy等)就來自這種靜態(tài)庫。由于本文篇幅較長,內(nèi)容較多,勢(shì)必需要先對(duì)閱讀本文的有關(guān)事項(xiàng)進(jìn)行說明,下面以問答形式給出。問:本文主要講解什么內(nèi)容?答:本文詳細(xì)介紹了DLL編程的方方面面,努力學(xué)完本文應(yīng)可以對(duì)DLL有較全面的掌握,并能編寫大多數(shù)DLL程序。問:如何看本文?答:本文每一個(gè)主題的講解都附帶了源代碼例程,可以隨文下載(每個(gè)工程都經(jīng)WINRAR壓縮)。所有這些例程都由筆者編寫并在VC++6.0中調(diào)試通過。當(dāng)然看懂本文不是讀者的最終目的,讀者應(yīng)親自動(dòng)手實(shí)踐才能真正掌握DLL的奧妙。問:學(xué)習(xí)本文需要什么樣的基礎(chǔ)知識(shí)?答:如果你掌握了C,并大致掌握了C++,了解一點(diǎn)MFC的知識(shí),就可以輕松地看懂本文。2靜態(tài)鏈接庫對(duì)靜態(tài)鏈接庫的講解不是本文的重點(diǎn),但是在具體講解DLL之前,通過一個(gè)靜態(tài)鏈接庫的例子可以快速地幫助我們建立“庫”的概念。圖1建立一個(gè)靜態(tài)鏈接庫如圖1,在VC++6.0中new—個(gè)名稱為libTest的staticlibrary工程(單擊此處下載本工程附件),并新建lib.h和lib.cpp兩個(gè)文件,lib.h和lib.cpp的源代碼如下://文件:lib.h#ifndefLIB_H#defineLIB_Hextern"C"intadd(intx,inty); //聲明為C編譯、連接方式的外部函數(shù)#endif//文件:lib.cpp#include"lib.h"intadd(intx,inty){returnx+y;}編譯這個(gè)工程就得到了一個(gè).lib文件,這個(gè)文件就是一個(gè)函數(shù)庫,它提供了add的功能。將頭文件和.lib文件提交給用戶后,用戶就可以直接使用其中的add函數(shù)了。標(biāo)準(zhǔn)TurboC2.0中的C庫函數(shù)(我們用來的scanf、printf、memcpy、strcpy等)就來自這種靜態(tài)庫。由于本文篇幅較長,內(nèi)容較多,勢(shì)必需要先對(duì)閱讀本文的有關(guān)事項(xiàng)進(jìn)行說明,下面以問答形式給出。問:本文主要講解什么內(nèi)容?答:本文詳細(xì)介紹了DLL編程的方方面面,努力學(xué)完本文應(yīng)可以對(duì)DLL有較全面的掌握,并能編寫大多數(shù)DLL程序。問:如何看本文?答:本文每一個(gè)主題的講解都附帶了源代碼例程,可以隨文下載(每個(gè)工程都經(jīng)WINRAR壓縮)。所有這些例程都由筆者編寫并在VC++6.0中調(diào)試通過。當(dāng)然看懂本文不是讀者的最終目的,讀者應(yīng)親自動(dòng)手實(shí)踐才能真正掌握DLL的奧妙。問:學(xué)習(xí)本文需要什么樣的基礎(chǔ)知識(shí)?答:如果你掌握了C,并大致掌握了C++,了解一點(diǎn)MFC的知識(shí),就可以輕松地看懂本文。2.靜態(tài)鏈接庫對(duì)靜態(tài)鏈接庫的講解不是本文的重點(diǎn),但是在具體講解DLL之前,通過一個(gè)靜態(tài)鏈接庫的例子可以快速地幫助我們建立“庫”的概念。圖1建立一個(gè)靜態(tài)鏈接庫如圖1,在VC++6.0中new—個(gè)名稱為libTest的staticlibrary工程(單擊此處下載本工程附件),并新建lib.h和lib.cpp兩個(gè)文件,lib.h和lib.cpp的源代碼如下://文件:lib.h#ifndefLIB_H#defineLIB_Hextern"C"intadd(intx,inty); //聲明為C編譯、連接方式的外部函數(shù)#endif//文件:lib.cpp#include"lib.h"intadd(intx,inty){returnx+y;}編譯這個(gè)工程就得到了一個(gè).lib文件,這個(gè)文件就是一個(gè)函數(shù)庫,它提供了add的功能。將頭文件和.lib文件提交給用戶后,用戶就可以直接使用其中的add函數(shù)了。標(biāo)準(zhǔn)TurboC2.0中的C庫函數(shù)(我們用來的scanf、printf、memcpy、strcpy等)就來自這種靜態(tài)庫。動(dòng)態(tài)鏈接庫中的導(dǎo)出接口可以使用VisualC++的Depends工具進(jìn)行查看,讓我們用Depends打開系統(tǒng)目錄中的user32.dll,看到了吧?紅圈內(nèi)的就是幾個(gè)版本的MessageBox了!原來它真的在這里啊,原來它就在這里??!D4F?fi4-?a.cTT&LIevt—FuvrlZ4111■CDl*E4HIi*-野"股】d (^l_J史1七色辰El鯊-.劇到FCon帕甕牌t蔭機(jī)嵋迺卍Ljtswstuo苗匹L:>LL■-1口■CDl*E4HIi*-野"股】d (^l_J史1七色辰El鯊-.劇到FCon帕甕牌t蔭機(jī)嵋迺卍Ljtswstuo苗匹L:>LL■-1口3EL^&LL、muxallB口、:mu.sjlbIXlyCEUJDU斗:WSEK32P1Lf二Imerwdii^Jinz-ULDLL覽mm.32ill三ljfjirjtu.DLLJlIT&U-dll1icamjeqll曹UJVAPIJZ.EU.■MB"■oil?IRPU建泄蟲EllETTDLLHU.mrftncm.urns,oojlTifr*凱蘭肆住Q&PCWWM?:£T*We/Ak咬師[2OOp5曲湖12I祁
W05/0It£Q0>如小沁: |護(hù)nt 1y^di.gft.Ordiirml;?WvB?n??gg?ra<"477電律吟加I熬)帖9(OtClW)仲iMltO)IBE(0^IEL)?2toffOa-EEJ483 ?M3E3)<EK~TCWJTWT磚rn-ftskitT30M)ED9^4T4血SD帕斗有一耳g陶iTfi〔H0NM347TI^QlDD)fllt^lDE)<^帕llDFT翻(ftDSED)4&E〔0油汁仃姬(Maes):~roitumTt^i『MVMlH?riuliiiid-wrrrocAH?FiTllLTid:E>YPr^c4r HtixLftB'tixARvi■■址sr?ct*N?i-x?c*iwlndarrc*V?ixl(?B-dxTIPhi?暑*lc中Bo£TH?ixLjtETBixT~ChOMHETOiffirfn&lE&CC■MXjOUKEtthtCOK!池M聃曲弊址FEihjsaisetoChdMOEWTCJjQitOK-nXiBSit*A^t^ikraln6ors?Ak1,^-4?由kA5ftlr1?A.izmsti?ui甜3E釁iXni*ljf96Ui*l珂Sdbiyit^*Tip3£Tin32r?iixi.cil-flVhEkJSf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 客戶購車合同范本
- 現(xiàn)代職場(chǎng)中的人際關(guān)系建設(shè)與溝通技巧培訓(xùn)
- 蒲公英甾醇對(duì)帕金森病小鼠模型中自噬功能異常的保護(hù)作用研究
- 結(jié)直腸鋸齒狀腺瘤臨床內(nèi)鏡病理特征分析及同時(shí)性腫瘤發(fā)生風(fēng)險(xiǎn)研究
- Mg和Li含量對(duì)Al-Mg-Li-Cu合金力學(xué)性能和腐蝕性能的影響研究
- 《魔種》中世界主義的研究
- 科技創(chuàng)新在教育行業(yè)中的國際比較研究
- 電子競技產(chǎn)業(yè)的市場(chǎng)競爭策略分析
- 設(shè)計(jì)方主導(dǎo)的EPC聯(lián)合體項(xiàng)目風(fēng)險(xiǎn)管理研究
- 科技產(chǎn)品網(wǎng)絡(luò)營銷的獨(dú)特方法
- 人事專員簡歷模板
- 超聲心動(dòng)圖診斷心肌病臨床應(yīng)用指南解讀
- 地面工程油氣集輸工藝介紹
- 消防設(shè)施維保服務(wù)投標(biāo)方案
- 城市軌道交通車輛電氣控制 課件 趙麗 第1-4章 城市軌道交通車輛電氣控制系統(tǒng)構(gòu)成、城市軌道交通車輛輔助供電系統(tǒng)、電動(dòng)列車常用電氣控制系統(tǒng)及其控制方法
- (2024年)新版黃金基礎(chǔ)知識(shí)培訓(xùn)課件
- 資產(chǎn)拆除報(bào)廢申請(qǐng)表
- 《社區(qū)康復(fù)》課件-第九章 言語障礙患者的社區(qū)康復(fù)實(shí)踐
- 萬千教育學(xué)前讓幼兒都愛學(xué)習(xí):幼兒園高質(zhì)量學(xué)習(xí)活動(dòng)設(shè)計(jì)與組織
- 2024年長沙職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 綠之源家電清洗調(diào)查問卷
評(píng)論
0/150
提交評(píng)論