MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt

MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt

ID:57058315

大?。?3.50 KB

頁數(shù):38頁

時(shí)間:2020-07-30

MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt_第1頁
MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt_第2頁
MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt_第3頁
MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt_第4頁
MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt_第5頁
資源描述:

《MFC 教程 第13章動(dòng)態(tài)鏈接庫_課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、第13章動(dòng)態(tài)鏈接庫1本章主要內(nèi)容動(dòng)態(tài)連接庫的概念及其組成動(dòng)態(tài)連接庫的創(chuàng)建動(dòng)態(tài)連接庫的使用2概論先來闡述一下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è)與EX

2、E獨(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)鏈接庫。3對(duì)動(dòng)態(tài)鏈接庫,我們還需建立如下概念:(1)DLL的編制與具體的編程語言及編譯器無關(guān)   只要遵循約定的DLL接口規(guī)范和調(diào)用方式,用各種語言編寫的DLL都可以相互調(diào)用。譬如Windows提供的系統(tǒng)DLL(其中包括了Windows的API),在任何開發(fā)環(huán)境中都能被調(diào)用,不在乎其是VisualBasic、VisualC++還是Delphi。4(2)動(dòng)態(tài)鏈接庫隨處可見   我們在Windo

3、ws目錄下的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é)圖形方面的操作5(3)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)

4、態(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)用。613.1動(dòng)態(tài)鏈接庫的基本概念Windows使用DLL實(shí)現(xiàn)程序模塊共享。其特點(diǎn)是:動(dòng)態(tài)鏈接的;公用的;自動(dòng)卸載。DLL由全局?jǐn)?shù)據(jù)、可導(dǎo)出函數(shù)、類和資源組成。主要任務(wù):為使用它的各應(yīng)用程序提供可調(diào)用的導(dǎo)出函數(shù)7根據(jù)編寫規(guī)范,Windows必須查找并執(zhí)行DLL里的DllMain函數(shù)作為加載DLL的依據(jù),

5、它使得DLL得以保留在內(nèi)存里。這個(gè)函數(shù)并不屬于導(dǎo)出函數(shù),而是DLL的內(nèi)部函數(shù)。這意味著不能直接在應(yīng)用工程中引用DllMain函數(shù),DllMain是自動(dòng)被調(diào)用的。8動(dòng)態(tài)鏈接庫的入口函數(shù)BOOLAPIENTRYDllMain(HANDLEhModule,//指向Dll本身的句柄DWORDul_reason_for_call,//Dll被調(diào)用的原因LPVOIDlpReserved)//系統(tǒng)所保留的參數(shù){//可以在這里編寫DLL的初始化代碼returnTRUE;}13.1動(dòng)態(tài)鏈接庫的基本概念9DllMain函數(shù)在DLL被加載和卸載時(shí)被調(diào)用,在單個(gè)線程啟

6、動(dòng)和終止時(shí),DLLMain函數(shù)也被調(diào)用,ul_reason_for_call指明了被調(diào)用的原因。原因共有4種,即PROCESS_ATTACH、PROCESS_DETACH、THREAD_ATTACH和THREAD_DETACH,以switch語句列出。10BOOLAPIENTRYDllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved) {  switch(ul_reason_for_call)  {   caseDLL_PROCESS_ATTACH:      …caseDL

7、L_THREAD_ATTACH:    …caseDLL_THREAD_DETACH:    …caseDLL_PROCESS_DETACH:    … }  returnTRUE; }11導(dǎo)出函數(shù)和內(nèi)部函數(shù)DLL中定義的供外部應(yīng)用程序調(diào)用的函數(shù),叫做導(dǎo)出函數(shù)(export?function);只為在DLL內(nèi)部調(diào)用的函數(shù)叫做內(nèi)部函數(shù)(internal?function);導(dǎo)出函數(shù)在客戶端叫做導(dǎo)入函數(shù)。13.1動(dòng)態(tài)鏈接庫的基本概念1213.2動(dòng)態(tài)鏈接庫的創(chuàng)建設(shè)計(jì)DLL的主要工作是編寫庫中的函數(shù),方法與編寫一般函數(shù)的方法基本相同。但要對(duì)庫中的函數(shù)進(jìn)

8、行必要的聲明,說明哪些函數(shù)是可以導(dǎo)出的,哪些不可以.聲明DLL導(dǎo)出函數(shù)有兩種方法:在.def文件中聲明;使用關(guān)鍵字_declspec(dllexpor

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

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

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