




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
動(dòng)態(tài)庫(DynamicLinkLibrary,DLL)是一些編譯過的可執(zhí)行程序模塊,它包含代碼、數(shù)據(jù)或資源,可以在應(yīng)用程序中或其他DLL中被調(diào)用。動(dòng)態(tài)庫的文件擴(kuò)展名一般·DLLDLL 種源的浪費(fèi)。如果使用DLL動(dòng)態(tài)庫,那么在建立應(yīng)用程序的可執(zhí)行文件時(shí),就不必將DLL到程序中,只需要在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)地裝載DLL。裝載時(shí)DLL將被映射到進(jìn)程的地DLL·DLLWindoWSDLLDLL在16位的Windows中,DLL有自己的數(shù)據(jù)段,因此所有需要調(diào)用同一個(gè)DLL的應(yīng)用程序都能夠同一個(gè)全局變量和靜態(tài)變量。但是在32位的系統(tǒng)中,情況就不同了。因?yàn)镈LL相互獨(dú)立,因此在某一DLL全局變量時(shí),要注意保持同步,以免。進(jìn) 可以這些在內(nèi)存中的共享區(qū)域的數(shù)據(jù)DLL,則可以減少開發(fā)的工作量并加系統(tǒng)的升級和。非常不錯(cuò)的實(shí)現(xiàn)方法。DLL的例程可以被應(yīng)用程序,而不顯示其中的代碼細(xì)節(jié)。DLLDLL態(tài)程序的工程中,然后在使用DLL函數(shù)的文件里DLL的頭文件即可 文,數(shù)的符號名和可選的標(biāo)識號,但是并不包含實(shí)際的代碼,LIB文件會(huì)作為DLL的替代文件被,文件中也包含了對應(yīng)的DLL文件名(但不是完全的路徑名),程序?qū)⑵湓贓XE文件DLLWindowsDLLDLLDLL動(dòng)態(tài)調(diào)用是由開發(fā)人員使用APl函數(shù)手工加載和卸載DLL,以達(dá)到調(diào)用DLL的目的。動(dòng)顯GetProeAddress14DLLDLLlLoadLibraryDLL。該函數(shù)的定義如下:HINSTANCELoadLibrary(LPCTSTRipLibFilpLibFileNameDLLDLL。DLLGetProcAddressGetProcAddressFARPROCGetProcAddress(HMODULEhModule, 參數(shù)ameN個(gè)需要獲取的輸出函數(shù),就需要執(zhí)行GetProcAddress函數(shù)N次,來獲取這N個(gè)函數(shù)的地BOOLLibrary(HMODULE參數(shù)hLibModule用于指定DLL即LoadLibrary函數(shù)的返回值。DLL,TRUEFALSE。DLLWindowsCEDLLWindowsCEDLLMFCDLL。WindowsCEDLLCMFCMFC·MFCDLLMFC)。 ——————————————————————————————————————態(tài)連接和靜態(tài)連接兩種,前者使用MFC的動(dòng)態(tài)庫(即共享版本),后者使用MFC的靜態(tài)·DLLDLL下面就分別介紹以上3類DLL動(dòng)態(tài)庫的創(chuàng)建方法。WindowsCEDLL新建一個(gè)基于“Win32MyCEDLL,實(shí)現(xiàn)頁面l4.114.1,圖14.2“Win32智能設(shè)備項(xiàng)目向?qū)?14DLL選擇了PocketPC2003、Windows5.0PocketPCSDK和Windows6.0MyCEDLL首先,每個(gè)DLL必須有一個(gè)點(diǎn),這就如同使用C語言編寫的應(yīng)用程序必須有一個(gè)WINMAlN函數(shù)一樣。DllMain是一個(gè)缺省的函數(shù),它負(fù)責(zé)初始化(Initialization)和結(jié)(Termination)工作。當(dāng)一個(gè)新的進(jìn)程或者該進(jìn)程的新的線程DLL,以及DLL的每MyCEDLL.cppDllMainBOOLAPIENTRYDliMain(HANDLEhModule,DWORDul—reason—for—call,LPVOID){{caseDLL—PROCESS— caseDLL—THREAD—ATTACH:caseDLL—THREAD—DETACH:caseDLL—PROCESS—DETACH:}return}ulreasonforcall>DLLPROCESSATTACHt>DLLTHREADATTACH:≯LLPROCESSDETACH:>LLTHREADDETACH:還可以被c調(diào)用。在c++下定義c函數(shù)時(shí),需要加上extem”C”,用extern”C”來Cccextern”CC++中個(gè)classMYCEDLL—APIexternMYCEDLL—APIintMYCEDLL—APldeclspec(dllexport),因?yàn)樵贛yCEDLL.hifdefMYCEDLL—#defineMYCEDLL—APIdeclspec(dllexport)#defineMYCEDLL—APIdeclspec(dllimport) MYCEDLL—APIint首先在MyCEDLL.h頭文件中添加TestDll函數(shù)的,代碼如下:extern”C”MYCEDLL—APIvoidTestDll(void);MyCEDLL.cppTestDllextern”C”MYCEDLL—APIvoidTestDll(void){完成以上操作后,一個(gè)簡單的DLL就編寫完了。將編譯環(huán)境設(shè)置為“Windows6ProfessionalSDK(ARMV4I)”,設(shè)備選擇“CHSWindows6Classic就會(huì)生成MyCEDLL.dll文件,將此文件到模擬器的Windows 在本章的第2節(jié)中介紹了調(diào)用DLL的兩種靜態(tài)調(diào)用和動(dòng)態(tài)調(diào)用在下面的示例中MyCEDLL.dll使用VS20051VC++1智能設(shè)備IMFC智能設(shè)備應(yīng)用程序向?qū)?chuàng)建一個(gè)基于框的應(yīng)備選擇CHSWindows6ClassicEmulator,把窗口字體改成宋體小五號VS2005ICalIDLLByStatic l4DLLCaIlDLLByStaticDl9.cpp文件中MyCEDLL.h頭文件,代碼如下:/+★★★★★★★★★★★★★★★★★★★★★★★★★★程序清單l4—voidCallDLLBStaticD9:0nBClickeBtnall(){/ 對 下DLL態(tài)使用VS2005[VC++1智能設(shè)備IMFC智能設(shè)備應(yīng)用程序向?qū)?chuàng)建一個(gè)基于框的應(yīng)設(shè)備選擇CHSWindows6ClassicEmulator,把窗口字體改成宋體小五號。CallDLLByDynamicDl9.hMyCEDLLTestDlltypedef在框上放置一個(gè)“調(diào)用”按鈕,用來調(diào)用MyCEDLL文件中的TestDll函數(shù),該按鈕的單擊代碼如程序l4.2所示。/+★★★★★★★★★★★★★★★★★★★★★★★★★★程序清單l4—voidCCallLLByDynmicDl9:0nBnClckedBtCal(){HINSTANCEhModule=LoadLibrary{}pTestDllpFun=(pTestDll)GetProcAddress(hModuleT(”TestDllI-))j{}{)//3.釋放DLL}編譯 14DLL14.3.2MFCRegularDLLMFCRegularDLLMFC繼承CWinApp的類。該類動(dòng)態(tài)庫的輸出函數(shù)具有如下形式:extern”C”EXPORTextern”C”C++代碼中調(diào)用。DLLAFX—MFCRegularDLLDLLCwinAppDllMainMFC下面就來創(chuàng)建一個(gè)基于MFC的RegularDLL。這個(gè)DLL會(huì)提供一個(gè)異步處理方法,當(dāng)方MFCRegularDPLLMFCRegularDLLMFCRegularDll新建一個(gè)基于“MFCDLL”AsynDll,l46在“MFC智能設(shè)備DLL向?qū)А笨蛑?,在“平臺(tái)”頁中,加入適當(dāng)?shù)钠脚_(tái)SDK。本示例選擇了“PocketPC2003”、“Windows5.0PocketPCSDK”和6.0 女YistalC++。案 位置也)::D。。proF螄、啦net200sc++wimp,s1v∞ 啞^拙 1確定jl取消 幫嘲鞭 14.6圖14.7“MFC智能設(shè)備DLL向?qū)А保铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩铩飅呈序l4—#defineASynDLL_EXPORTAPI//9出DIl函數(shù) {longASynDLL—EXPORT—APIlongASynDLLEXPORTAPI14DLLtypedefvoid(+/l4—TDataReadNotifyDataReadNotiDWORDDoTheWork(LPVOID{if(DaaReadNotifY{)returnlongASynDLL——EXPORT_API{AFXMANAGESTATE(AfxGetStaticModuleState());HANDLEhThread;DWORDpThreadId;(LPTHREADSTARTROUTINE)1ProcAdr,returnoj\1。ngASynDLL—EXPORT—APIsetcallbackPr。cAddr(10ng{longResult=0;DataReadNotify=(TDataReadN。tify)iProcAddressjif(DataReadNotify!-NULL){)returnResultASynDIl就編寫完成了。此時(shí)就可以把它編譯并到模擬器中了。使用Vs2005lVc++1智能設(shè)備IMFc智能設(shè)備應(yīng)用程序向?qū)?chuàng)建一個(gè)基于框的應(yīng)用程序ASynDIITest,編譯環(huán)境設(shè)置為WindoWS6ProfessionalSDK(ARMV4I),設(shè)擇CHSWindows6ClassicEmulator,把窗口字體改成宋體小五號typedeftypedef//DIl句HINSTANCEm—hModule。I’QueryDataTSetCallbackProcAddrm/“++++++++++**+***voidQueryReadN。tify(10ngiDBData)—T(”DBDatafromDLL14.5S—T(”SampleApp”),MB—OK+MB—/cAsynllTestl9:0nnitDialg(/★★★★★★★★★★★★★★★★★★★★★★★★★★★程戶筍14—14.6mif(m—hModule2。{return if(mpQueryData22{returnFALSE;ASynDllsecabackProcAddrm—pSetCalibackProcAddr2—iffrnpSetCalibackProcAddr22{returnE'ALSE;l//★★★★★★★★★★★★★★★★★★★★★★★★★★+程序清單l4—CSynDllTstDl90nDestry()CDial0:0nDetroy();}/鈕的單擊代碼如程序l4.8所示。/★★★★★★★★★★★★★★★★★★★★★★★★★★★程序l4—voidCSynDllTs:tDl9:0nBnCickedBnCai(){longmpSetCallbackProcAddr(1m)/14.8在這個(gè)小節(jié)中將介紹一個(gè)資源DLL的例子該DLL將位圖和圖標(biāo)兩種資源下面就新建一個(gè)基于“Win32DLLResDll。將編譯環(huán)境設(shè)置為Windows6ProfessionalSDK(ARMV4I),設(shè)備選擇CHSWindows6ClassicEmulator 擇IDBRESBMP。接著重復(fù)插入位圖的操作,添加一個(gè)圖標(biāo)(ICON),命名為IDl—DLLDLLResDll.dll14DLL程序ResDllTest,編譯環(huán)境設(shè)置為Windows6ProfessionalSDK(ARMV4I),設(shè)備選擇Windows6ClassicEmulator,把窗口字體改成宋體小五號。14.1標(biāo)屬IDC—B觀標(biāo)題設(shè)為釋放為CResDllTestDl9類添加一個(gè)私有成員變量mhDll,用于資源DLL句柄,代//DLLHINSTANCEm—#defineIDB—RESBMP #defineIDl——RESICON DLL”DLLDLL”按鈕用于從應(yīng)用程序中釋放DLL。這4個(gè)按鈕的單擊代碼如程序14—9所示。/★★★★★★★★★★★★★★★★★★★★★★★★★★★程序l4—//anVOidCeSDllTetDl9:nBnCliCedBtnLad()mhDll=LoadLibraryif(m—hDll22{}CResDlTestDl:0nBnlickedBn{DLLif(m_hDlll2NULL){Library(m—hDl))voidCResDlTestDl:0nBnlickedBnBmp(){HBITMAPHBITMAPbmp=LoadBitmap(m_hDll,MAKEINTRESOURCE(IDB—RESBMP))j{}CDCCDC*pD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年保安證考試精準(zhǔn)定位試題及答案
- 上??萍即髮W(xué)《聲影北京》2023-2024學(xué)年第二學(xué)期期末試卷
- 解決2025年高中化學(xué)模擬試題及答案的常見問題
- 江西經(jīng)濟(jì)管理職業(yè)學(xué)院《體育產(chǎn)業(yè)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年江蘇省連云港市贛榆區(qū)高三4月考試題-歷史試題試卷含解析
- 2025年保安證考試成功案例及答案
- 2025保安證考試常識普及試題及答案
- 助力升職的保安證考試必背試題及答案
- 安徽省阜陽市臨泉縣2025年三下數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- 重慶交通職業(yè)學(xué)院《舞蹈》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年淮南職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫審定版
- 第十章 第一節(jié) 科學(xué)探究:杠桿的平衡條件(教學(xué)設(shè)計(jì))2023-2024學(xué)年八年級下冊物理滬科版(安徽專版)
- 工地試驗(yàn)室我來講安全
- 買賣合同范文模板
- 2025(人教版)數(shù)學(xué)一年級下冊全冊教學(xué)案
- 教學(xué)課件-《幾何量精度設(shè)計(jì)與檢測(第2版)》金嘉琦
- 幼兒園三會(huì)一課會(huì)議記錄
- 2025年宜賓興文縣招考聘用社區(qū)專職工作者7人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 二 20以內(nèi)的退位減法 第1課時(shí) 十幾減9課件2024-2025人教版一年級數(shù)學(xué)下冊
- 減資協(xié)議書(2篇)
- 2025年山東能源集團(tuán)權(quán)屬企業(yè)內(nèi)蒙古榮信化工限公司社會(huì)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
評論
0/150
提交評論