動態(tài)鏈接庫編程

動態(tài)鏈接庫編程

ID:27067380

大?。?82.01 KB

頁數(shù):22頁

時間:2018-11-30

動態(tài)鏈接庫編程_第1頁
動態(tài)鏈接庫編程_第2頁
動態(tài)鏈接庫編程_第3頁
動態(tài)鏈接庫編程_第4頁
動態(tài)鏈接庫編程_第5頁
資源描述:

《動態(tài)鏈接庫編程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、第12章動態(tài)鏈接庫編程在Windows操作系統(tǒng)環(huán)境中,動態(tài)鏈接庫技術(shù)有著廣泛的應(yīng)用。操作系統(tǒng)的核心功能、系統(tǒng)服務(wù)、應(yīng)用程序服務(wù)等多數(shù)是由一組動態(tài)鏈接庫實現(xiàn)的。在Windows應(yīng)用程序中使用動態(tài)鏈接庫有很多的好處。最主要的一點說是它可以使得多個應(yīng)用程序共享一段代碼,從而可以大幅度的降低應(yīng)用程序的資源開銷,同時很縮小了應(yīng)用程序的最終執(zhí)行代碼的大小。12.1基本概念在開發(fā)和使用動態(tài)鏈接庫之前,有必要了解一下動態(tài)鏈接庫的相關(guān)概念。只有了解了動態(tài)鏈接庫的結(jié)構(gòu)和工作機制,才能靈活有效地開發(fā)和使用它。12.1.1動態(tài)

2、鏈接庫的概念動態(tài)鏈接庫(DLL,Dynamic-LinkLibrary)也是一種可執(zhí)行文件,只不過它不能像普通的EXE文件那樣可以直接運行,而是用來為其它可執(zhí)行文件(包括EXE文件和其它DLL)提供共享函數(shù)庫。使用DLL的應(yīng)用程序可以調(diào)用DLL中的導(dǎo)出函數(shù),不過在應(yīng)用程序本身的執(zhí)行代碼中并不包含這些函數(shù)的執(zhí)行代碼,它們經(jīng)過編譯和鏈接之后,獨立的保存在DLL中。與動態(tài)鏈接庫相對應(yīng),還有一種稱為靜態(tài)連接庫的函數(shù)庫,二者的主要區(qū)別就是在使用方法上。12.1.2動態(tài)鏈接庫的優(yōu)點DLL在Windows編程中得到了

3、廣泛的應(yīng)用。WindowsAPI函數(shù)中的相當(dāng)部分就是由一組DLL所提供的,這些DLL從安裝Windows起就存在于系統(tǒng)中了。事實上,前面幾章早就在使用DLL進行編程了,只不過,所使用的DLL都是現(xiàn)成的,并且所有調(diào)用DLL的操作都由VisualC++的編譯和鏈接程序替用戶完成了。12.1.3VisualC++6.0可開發(fā)的DLLVisualC++6.0支持多種DLL,包括:非MFCDLL、靜態(tài)鏈接到MFC的常規(guī)DLL、動態(tài)鏈接到MFC的常規(guī)DLL和MFC擴展DLL。其中,非MFCDLL也稱為Win32DL

4、L,其內(nèi)部不采用MFC類庫結(jié)構(gòu),導(dǎo)出函數(shù)一般為標(biāo)準(zhǔn)的C接口。它能被非MFC或MFC編寫的應(yīng)用程序所調(diào)用。(具體內(nèi)容請參照本書)12.1.4DLL文件的組成一個發(fā)布的可供使用的動態(tài)鏈接庫,一般包含三個文件:包含文件(.H)、導(dǎo)入庫文件(.LIB)和實際代碼文件(.DLL)。(具體內(nèi)容請參照本書)12.2DLL的創(chuàng)建與調(diào)用本節(jié)以非MFCDLL(Win32DLL)為例來講解DLL的結(jié)構(gòu)和導(dǎo)出方法,并介紹創(chuàng)建和使用DLL的方法和步驟。12.2.1Win32DLL的創(chuàng)建與MFC應(yīng)用程序框架的創(chuàng)建相似,使用AppW

5、izard可以方便地創(chuàng)建一個Win32DLL框架。本節(jié)將利用AppWizard創(chuàng)建一個Win32DLL,該DLL提供了一個導(dǎo)出函數(shù)FactorialFun,實現(xiàn)正整數(shù)的階乘運算(如,5!=5*4*3*2*1)。(具體內(nèi)容請參照本書)12.2.2DLL的導(dǎo)出DLL文件和EXE文件都屬于可執(zhí)行文件,不同的是DLL文件包含了一個導(dǎo)出表,導(dǎo)出表中給出了可以從DLL中導(dǎo)出的所有函數(shù)的名字。外部可執(zhí)行程序只能訪問包括在DLL的導(dǎo)出表中的函數(shù),DLL中的其它函數(shù)是私有的,不能為外部可執(zhí)行程序所訪問。從DLL中導(dǎo)出函數(shù)

6、有兩種方法:在定義函數(shù)時使用關(guān)鍵字_declspec(dllexport);在創(chuàng)建DLL時使用模塊定義(.DEF)文件。(具體內(nèi)容請參照本書)12.2.3應(yīng)用程序鏈接DLL鏈接應(yīng)用程序到DLL也有兩種方法:隱式鏈接和顯式鏈接。隱式鏈接又稱為靜態(tài)加載。如果應(yīng)用程序使用了隱式鏈接,操作系統(tǒng)在加載應(yīng)用程序的同時加載應(yīng)用程序所使用的DLL。顯式鏈接又稱為動態(tài)加載。使用動態(tài)加載的應(yīng)用程序必須在代碼中明確的加載所使用的DLL,并使用指針來調(diào)用DLL中的導(dǎo)出函數(shù),在使用完畢之后,應(yīng)用程序必須卸載所使用的DLL。(具體

7、內(nèi)容請參照本書)12.3MFC常規(guī)DLL的創(chuàng)建與使用前面已經(jīng)介紹了普通DLL(Win32DLL)的開發(fā)和使用,下面將要介紹基于MFC的DLL的開發(fā)。MFCDLL能夠使用MFC類庫,從而能在MFC的幫助下開發(fā)出功能強大的模塊?;贛FC的DLL有MFC常規(guī)DLL和MFC擴展DLL,本節(jié)將介紹MFC常規(guī)DLL的創(chuàng)建與使用。12.3.1基本概念MFC常規(guī)DLL,顧名思義,其包含兩方面的含義。首先,它是MFCDLL,即可以在DLL的內(nèi)部使用MFC類庫。其次,它是常規(guī)的,即它不同于MFC擴展DLL,在其內(nèi)部雖然可

8、以使用MFC,但它與應(yīng)用程序的接口不能是MFC,如它不能導(dǎo)出一個MFC類的派生類。MFC常規(guī)DLL有兩種類型:靜態(tài)鏈接到MFC庫的規(guī)則DLL(RegularDLLwithMFCstaticallylinked)和動態(tài)鏈接到MFC庫的規(guī)則DLL(RegularDLLusingsharedMFCDLL)。從開發(fā)角度講,兩者的開發(fā)過程一樣的。(具體內(nèi)容請參照本書)12.3.2MFC常規(guī)DLL的創(chuàng)建同樣,使用AppWizard可以方便地創(chuàng)建一個MF

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。