![熱區(qū)技術(shù)中的動態(tài)鏈接庫應(yīng)用_第1頁](http://file4.renrendoc.com/view/c304e97f0d873a421c2e2cb7c8b53f77/c304e97f0d873a421c2e2cb7c8b53f771.gif)
![熱區(qū)技術(shù)中的動態(tài)鏈接庫應(yīng)用_第2頁](http://file4.renrendoc.com/view/c304e97f0d873a421c2e2cb7c8b53f77/c304e97f0d873a421c2e2cb7c8b53f772.gif)
![熱區(qū)技術(shù)中的動態(tài)鏈接庫應(yīng)用_第3頁](http://file4.renrendoc.com/view/c304e97f0d873a421c2e2cb7c8b53f77/c304e97f0d873a421c2e2cb7c8b53f773.gif)
![熱區(qū)技術(shù)中的動態(tài)鏈接庫應(yīng)用_第4頁](http://file4.renrendoc.com/view/c304e97f0d873a421c2e2cb7c8b53f77/c304e97f0d873a421c2e2cb7c8b53f774.gif)
![熱區(qū)技術(shù)中的動態(tài)鏈接庫應(yīng)用_第5頁](http://file4.renrendoc.com/view/c304e97f0d873a421c2e2cb7c8b53f77/c304e97f0d873a421c2e2cb7c8b53f775.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、熱區(qū)技術(shù)中的動態(tài)鏈接庫應(yīng)用摘要:動態(tài)鏈接庫,簡稱DLL,英文全稱“DynamicLinkLibrary”c動態(tài)鏈接是相對于靜態(tài)鏈接而言的。動態(tài)連接庫是一個可以同時被多個程序使用的代碼和數(shù)據(jù)的庫,也可以理解為是一個可以被其它應(yīng)用程序共享的程序模塊。分析了熱區(qū)技術(shù)中的動態(tài)鏈接庫的應(yīng)用。關(guān)鍵詞:熱區(qū);動態(tài)連接庫;隱式調(diào)用;顯示調(diào)用;DLL0引言隨著計算機的快速發(fā)展,計算機的應(yīng)用日益廣泛,計算機軟件的開發(fā)越來越重要,各種應(yīng)用軟件越來越多。在Windows平臺下同時打開多個可視化程序會導(dǎo)致Windows桌面的復(fù)雜化。為了簡化屏幕,在一些應(yīng)用軟件中,都具有熱區(qū)的功能。例如我們比較熟悉的QQ,當(dāng)把QQ拖到屏
2、幕的某一區(qū)域時,QQ自動隱藏;當(dāng)把鼠標(biāo)移回到某一區(qū)域時QQ可以自動彈出。一般我們把這種可以自動隱藏和彈出程序的區(qū)域稱為熱區(qū)。動態(tài)連接庫是一個極其重要的技術(shù),它可以使開發(fā)人員通過編寫動態(tài)鏈接庫,方便靈活地實現(xiàn)大型程序的開發(fā)。本文介紹了在C+Builder6.0平臺下實現(xiàn)熱區(qū)的過程中,通過編寫動態(tài)鏈接庫的方法,介紹了動態(tài)連接庫的應(yīng)用。1動態(tài)鏈接庫動態(tài)鏈接是與靜態(tài)連接相對的。動態(tài)鏈接庫(DLL)在物理上是一些獨立的可執(zhí)行代碼的集合,同時也可以存放各種資源。雖然動態(tài)鏈接庫中存放可執(zhí)行代碼,但本身是不能運行的,只有被其它應(yīng)用程序在運行時加載后,裝入到應(yīng)用程序占用內(nèi)存的代碼段,由應(yīng)用程序調(diào)用動態(tài)鏈接庫的代
3、碼,如圖1所示。一般來說,DLL是一種磁盤文件,以.DLL、.DRV、.FON.SYS和許多以.EXE為擴展名的系統(tǒng)文件都可以是DLL。如果與其它DLL之間沒有沖突,該文件通常映射到進程虛擬空間的同一地址上。DLL模塊中包含各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL可以有自己的數(shù)據(jù)段,但沒有自己的堆棧,使用與調(diào)用它的應(yīng)用程序相同的堆棧模式。一個DLL在內(nèi)存中只有一個實例;DLL實現(xiàn)了代碼封裝性。DLL的編制與具體的編程語言及編譯器無關(guān)。在Windows操作系統(tǒng)中,DLL對于程序執(zhí)行是非常的重要。DLL不是一個可運行的程序,只能編譯,生成DLL系統(tǒng)文件,然后加載到應(yīng)用程序中。當(dāng)刪除程序的時候,沒有
4、用的DLL文件也應(yīng)該刪除,不然隨著安裝程序的越來越多,DLL文件也會越來越多,久而久之就會造成系統(tǒng)的負擔(dān)。動態(tài)鏈接庫代碼在運行時間加載的特性很重要。一個大型程序如果不使用動態(tài)鏈接庫,那么當(dāng)這個程序的某一個功能需要升級或改進,必須寫一些源代碼,然后將整個程序編譯,連接形成一個新的可執(zhí)行文件,最終給客戶重新安裝使用。這個過程需要花費很長時間,哪怕只是給這個大型程序多寫一行代碼??墒牵绻捎么罅縿討B(tài)鏈接庫構(gòu)建整個應(yīng)用程序,那么只需要改寫需要升級的動態(tài)鏈接庫的源代碼,重新編譯連接后,發(fā)送給客戶,客戶所做的僅僅是覆蓋原來的動態(tài)鏈接庫即可,不需要重新安裝整個應(yīng)用程序。使用動態(tài)鏈接庫構(gòu)建整個應(yīng)用程序是模塊
5、化設(shè)計程序的一個重要特點。2動態(tài)鏈接庫的使用方式其它應(yīng)用程序需要使用DLL時,需要調(diào)用DLL文件,有兩種調(diào)用方式:靜態(tài)調(diào)用方式和動態(tài)調(diào)用方式。2.1靜態(tài)調(diào)用方式也稱為隱式調(diào)用方式。需要應(yīng)用程序運行前,將伴隨DLL文件發(fā)布的lib文件添加到工程中,并且使用DLL的文件中inelude伴隨DLL文件發(fā)布的h文件。然后就可以像調(diào)用一般函數(shù)一樣調(diào)用DLL的導(dǎo)出函數(shù)。2.2動態(tài)調(diào)用方式也稱為顯示調(diào)用方式。指在應(yīng)用程序中運用LoadLibrary函數(shù),DLL文件能被顯式地映射到進程的地址空間。動態(tài)調(diào)用方式的優(yōu)點是在客戶程序使用動態(tài)鏈接庫的時候不需要包括含有導(dǎo)出函數(shù)聲明的頭文件,也不需要導(dǎo)入動態(tài)鏈接庫生成的
6、類型庫(一組LIB文件)。動態(tài)鏈接庫的創(chuàng)建很多開發(fā)工具有專門的向?qū)Вū热鏑+Builder)。這里需要主要的是在應(yīng)用程序退出之前,應(yīng)該用FreeLibrary釋放動態(tài)連接庫。3熱區(qū)動態(tài)鏈接庫的建立和用法在C+builder6.0集成開發(fā)環(huán)境中,建立一個From1,設(shè)置為熱區(qū)。通過菜單File|New|Other打開一個NewItems對話框,選擇New中的DLLWizard。生成DLL的主單元文件。將會看到有如下的代碼:#inelude#inelude#pragmahdrstop#pragmaargsusedintWINAPIDllEntryPoint(HINSTANCEhinst,unsig
7、nedlongreason,void*lpReserved)return1;這里DllEntryPoint()是DLL的入口函數(shù),它將在DLL加載和卸載時被調(diào)用,調(diào)用的具體情況取決于參數(shù)reasor。hinst是DLL自身的句柄。lpReserved用來說明進一步的參數(shù)。下面在DLL庫中加入代碼以實現(xiàn)熱區(qū)的功能,加入代碼如下:#definemHookWM_USER+1000/自己定義的消息HINSTANCEhinst=NULL;/DLL的句柄HHOOKhHook二NULL;/Hook的句柄externCvoid_export_stdcallInstallHook();II鼠標(biāo)鉤子安裝且提供為外
8、部接口void_export_stdcallUnInstallHook();鼠標(biāo)鉤子解除且提供為外部接口LRESULTCALLBACKMouseProc(intnCode,WPARAMwParam,LPARAMlParam)/回調(diào)函數(shù)/對鼠標(biāo)的坐標(biāo)進行判斷并返回;HWNDhWnd=FindWindow(NULL,熱區(qū));MOUSEHOOKSTRUCT*mhStruct=(MOUSEHOOKSTRUCT*)lParam;PostMessage(hWnd,mHook,mhStruct-pt.x,mhStruct-pt.y);returnCallNextHookEx(hHook,nCode,wPar
9、am,lParam);找到使用DLL的窗體函數(shù),返回需要的參數(shù)。void_stdcallInstallHook()if(!hHook)hHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,hInst,0);void_stdcallUnInstallHook()if(hHook)UnhookWindowsHookEx(hHook);intWINAPIDllEntryPoint(HINSTANCEhinst,unsignedlongreason,void*lpReserved)hInst二hinst;/DLL自身的句柄return1;這樣可以很容易
10、的實現(xiàn)熱區(qū)所需要的返回參數(shù)值。還可以實現(xiàn)代碼的封閉性。特別是像一些語言類的軟件,可以分別將各種語言獨立寫在DLL中。以供獨立使用。在升級時,可以分別獨立的對庫升級。編譯生成動態(tài)鏈接庫。這樣加載到應(yīng)用程序后就可以實現(xiàn)想要的功能。當(dāng)入口點函數(shù)返回FALSE值時,如果使用的是加載時動態(tài)鏈接,則應(yīng)用程序不啟動。如果使用的是運行時動態(tài)鏈接,則只有個別DLL不會加載。在Form1頭文件.h中做聲明,聲明為public。聲明如下:void_fastcallWndProc(Messages:TMessage&Message);boolflag;然后在Froml的*cpp文件中編寫實現(xiàn)熱區(qū)功能的函數(shù),用隱式調(diào)用
11、的方式進行處理。#definemHookWM_USER+1000externCvoid_stdcallInstallHook();/外部DLL安裝鼠標(biāo)鉤子函數(shù)void_stdcallUnInstallHook();/外部DLL解除鼠標(biāo)鉤子函數(shù)void_fastcallTForm1:FormCreate(TObject*Sender)flag二false;Caption二熱區(qū);/設(shè)置windows名稱InstallHook();/安裝鼠標(biāo)鉤子void_fastcallTForm1:FormClose(TObject*Sender,TCloseAction&Action)UnInstallHook
12、();/解除鼠標(biāo)鉤子編寫功能函數(shù),確定熱區(qū)的區(qū)域范圍。添加控件Label1用來顯示鼠標(biāo)屏幕坐標(biāo)、Label2用來顯示Form的最大坐標(biāo)值。void_fastcallTfrmMain:WndProc(Messages:TMessage&Message)intx,y;staticintxRange,yRange;if(Message.Msg=mHook)x=Message.WParam;mhStruct-pt.x,y=Message.LParam;mhStruct-pt.yif(flag&(xxRange|yyRange|xVisible二false;if(x=Left&x=xRange&yVis
13、ible=true;Label1-Caption=AnsiString(Message.WParam)+,+Message丄Param;顯示鼠標(biāo)屏幕坐標(biāo)Label2-Caption=AnsiString(xRange)+,+AnsiString(yRange);/顯示Form的最大坐標(biāo)值if(Message.Msg=WM_MOVE)yRange二Top+Height;/得到Form的最大橫坐標(biāo)xRange二Left+Width;得到Form的最大縱坐標(biāo)if(Form1-TopTop=0;flag二true;if(Top=20)flag二false;TForm:WndProc(Message);
14、在C+Builder6.0下編譯運行通過,實現(xiàn)了熱區(qū)的功能。4動態(tài)鏈接庫的優(yōu)點動態(tài)鏈接庫有很多的優(yōu)點,總結(jié)如下:(1)代碼的復(fù)用。DLL代碼可以供多個程序使用。如某個設(shè)備的驅(qū)動程序可以通過DLL發(fā)布,需要使用該設(shè)備的應(yīng)用程序都可以通過調(diào)用這個DLL實現(xiàn),這就避免為一個功能重復(fù)開發(fā)多份代碼。(2)代碼在應(yīng)用程序間共享。DLL的好處不僅在邏輯上的共享,還包括物理上的共享。多個應(yīng)用程序使用DLL時,不必DLL代碼的拷貝,它們可以共享已載入物理內(nèi)存的DLL代碼段,這樣可以節(jié)約每個應(yīng)用程序所占的內(nèi)存。(3)代碼按功能分離。DLL能將應(yīng)用程序代碼中重要和獨立的功能分離出來,以后程序這部分功能的修改、升級,只要替換該DLL文件。同時程序的維護也方便了。動態(tài)庫可被多種計算機語言調(diào)用,便于在各種環(huán)境下的系統(tǒng)集成。5結(jié)束語動態(tài)鏈接庫實際上還有很多應(yīng)用,如:組件技術(shù)、Windows服務(wù)等等。動態(tài)鏈接庫可以實現(xiàn)代碼和資源的共享,大大減少系統(tǒng)資源的占用,因此在當(dāng)今的應(yīng)用程序開發(fā)中起著非常重要的作用。參考文獻:CHARLIECALVERT.C+Builder應(yīng)用開
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年紅磷阻燃母粒項目可行性研究報告
- 2025年電動車減震項目可行性研究報告
- 2025年泡泡紗布項目可行性研究報告
- 2025至2031年中國柜臺鏡行業(yè)投資前景及策略咨詢研究報告
- 2025年懸壁梁式傳感器項目可行性研究報告
- 2025至2031年中國可調(diào)腹肌訓(xùn)練器行業(yè)投資前景及策略咨詢研究報告
- 2025年三乙二醇雙異辛酸酯項目可行性研究報告
- 2025至2030年中國雪松苗木數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國銅沖片接觸腳數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年紅外線自動門項目投資價值分析報告
- (更新版)HCIA安全H12-711筆試考試題庫導(dǎo)出版-下(判斷、填空、簡答題)
- 糖尿病運動指導(dǎo)課件
- 蛋白表達及純化課件
- 完整版金屬學(xué)與熱處理課件
- T∕CSTM 00640-2022 烤爐用耐高溫粉末涂料
- 304不銹鋼管材質(zhì)證明書
- 民用機場不停航施工安全管理措施
- 港口集裝箱物流系統(tǒng)建模與仿真技術(shù)研究-教學(xué)平臺課件
- 新教科版2022年五年級科學(xué)下冊第2單元《船的研究》全部PPT課件(共7節(jié))
- QTD01鋼質(zhì)焊接氣瓶檢驗工藝指導(dǎo)書
- 人教版七年級英語下冊全冊英語單詞默寫直接打印
評論
0/150
提交評論