資源描述:
《實驗二 動態(tài)鏈接庫使用》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實驗二動態(tài)鏈接庫的建立與調(diào)用實驗?zāi)康?、理解動態(tài)鏈接庫的實現(xiàn)原理;2、掌握WINDOWS系統(tǒng)動態(tài)鏈接庫的建立方法;3、掌握WINDOWS環(huán)境下動態(tài)鏈接庫的調(diào)用方法;實驗準(zhǔn)備知識1、動態(tài)鏈接庫基礎(chǔ)知識;2、動態(tài)鏈接庫入口函數(shù)(DLLMain);3、動態(tài)鏈接庫導(dǎo)入/導(dǎo)出函數(shù);聲明導(dǎo)出函數(shù)的代碼:_declspec(dllexport)MyDllFun(intx,inty);聲明導(dǎo)入函數(shù)的代碼:_declspec(dllimport)MyDllAdd(intx,inty);4、隱式鏈接和顯式鏈接;實驗
2、內(nèi)容1、在WINDOWS環(huán)境下建立一個動態(tài)鏈接庫;2、使用隱式調(diào)用調(diào)用動態(tài)鏈接庫;3、使用顯式調(diào)用調(diào)用動態(tài)鏈接庫;實驗要求1、掌握動態(tài)鏈接庫建立和調(diào)用方法;2、在XP+VC6.0環(huán)境下建立一個動態(tài)鏈接庫,并分別使用隱式和顯式調(diào)用;實驗內(nèi)容1、動態(tài)鏈接庫簡介1.1DLL概述動態(tài)鏈接庫(DynamicLinkLibray,簡稱DLL)是一些編譯過的可執(zhí)行的程序模塊,可以在應(yīng)用程序中或其他DLL中被調(diào)用。DLL的應(yīng)用非常廣泛,可以實現(xiàn)多個應(yīng)用程序的代碼和資源共享,是Windows程序設(shè)計中的一個非常重
3、要的組成部分。DLL設(shè)計程序的優(yōu)點:·*共享代碼、資源和數(shù)據(jù)。DLL作為一種基于Windows的程序模塊,不僅可以包含可執(zhí)行的代碼,還可以包括數(shù)據(jù)和各種資源等,擴大了庫文件的使用范圍;·*可將系統(tǒng)模塊化,方便升級?!?隱藏實現(xiàn)的細節(jié);*DLL與語言無關(guān);1.2DLL的調(diào)用不論使用何種語言對編譯好的DLL進行調(diào)用時,基本上都有兩種調(diào)用方式,即靜態(tài)調(diào)用方式和動態(tài)調(diào)用方式。靜態(tài)調(diào)用方式由編譯系統(tǒng)完成對DLL的加載和應(yīng)用程序結(jié)束時DLL卸載的編碼(如還有其它程序使用該DLL,則Windows對DLL的應(yīng)
4、用記錄減1,直到所有相關(guān)程序都結(jié)束對該DLL的使用時才釋放它),簡單實用,但不夠靈活,只能滿足一般要求。動態(tài)調(diào)用方式是由編程者用API函數(shù)加載和卸載DLL來達到調(diào)用DLL的目的,使用上較復(fù)雜,但能更加有效地使用內(nèi)存,是編制大型應(yīng)用程序時的重要方式。1.2.1DLL的靜態(tài)調(diào)用DLL的靜態(tài)調(diào)用由編譯系統(tǒng)完成對DLL的加載和應(yīng)用程序結(jié)束時DLL卸載,在VC中靜態(tài)調(diào)用DLL非常簡單,首先將動態(tài)鏈接庫的.LIB文件和.DLL文件加入到應(yīng)用程序的工程中,然后在使用DLL中的函數(shù)文件里引用DLL的頭文件(.h
5、)即可。當(dāng)開發(fā)人員通過靜態(tài)方式編譯并生成應(yīng)用程序時,應(yīng)用程序中的調(diào)用函數(shù)與LIB文件中的導(dǎo)出符號相匹配,這些符號或標(biāo)示進入到生成的EXE文件中。當(dāng)應(yīng)用程序運行過程中需要加載DLL文件時,操作系統(tǒng)將根據(jù)這些信息查尋并加載DLL,然后通過符號或標(biāo)示實現(xiàn)對DLL函數(shù)的動態(tài)鏈接。當(dāng)加載應(yīng)用程序的EXE文件時,所有被應(yīng)用程序調(diào)用的DLL文件都被加載到內(nèi)存中,這時可執(zhí)行程序直接通過函數(shù)名調(diào)用DLL的輸出函數(shù),其調(diào)用方法與調(diào)用程序內(nèi)部函數(shù)相同。1.2.2DLL的動態(tài)調(diào)用動態(tài)調(diào)用方式是由編程者用API函數(shù)加載和
6、卸載DLL來達到調(diào)用DLL的目的,動態(tài)調(diào)用是指在應(yīng)用程序中使用LoadLibrary函數(shù)或MFC提供的AfxLoadLibrary函數(shù)顯式調(diào)用自己所需要的動態(tài)鏈接庫,動態(tài)鏈接庫的文件名就是上面兩個函數(shù)的參數(shù),然后在使用GetProAddress()函數(shù)獲取所需要引入的函數(shù)。完成上述操作后,應(yīng)用程序可以調(diào)用引入的函數(shù)。在應(yīng)用程序退出之前,應(yīng)該使用FreeLibrary函數(shù)或MFC提供的AfxFreeLibrary函數(shù)來釋放動態(tài)鏈接庫。(靜態(tài)鏈接、動態(tài)鏈接等基礎(chǔ)概念見PDF文檔)2、動態(tài)鏈接庫的實現(xiàn)
7、2.1參考PDF文檔,練習(xí)DLL文件的創(chuàng)建和調(diào)用;2.2簡單MFCDLL例子例1:設(shè)計動態(tài)鏈接庫,并向庫中添加繪制矩形和橢圓的函數(shù)。(1)新建一個MFCAppWizard[dll]工程,給工程命名為mydll,如圖:(1)單擊確定進入下一步,如下圖,可以對DLL的類型等進行設(shè)置,采用默認的設(shè)置即可,單擊完成按鈕,向?qū)ё詣由上嚓P(guān)的文件和資源。(2)單擊工作區(qū)的FileView頁面,可以看到向?qū)傻奈募T陬^文件夾里有mydll.h文件,在源文件夾里有mydll.cpp文件,可以在mydll.h
8、文件里添加自定義函數(shù)的原型,在mydll.cpp文件中定義函數(shù)。此外,在源文件夾里還有一個mydll.def文件。(1)在mydll.h文件中添加函數(shù)原型,代碼如下:、voidDrawEllipse(CClientDC*pDC,intx1,inty1,intx2,inty2);voidDrawRectangle(CClientDC*pDC,intx1,inty1,intx2,inty2);classCMydllApp:publicCWinApp{public:CMydllApp();//Over