Delphi 中動態(tài)鏈接庫(DLL)的建立和使用_第1頁
Delphi 中動態(tài)鏈接庫(DLL)的建立和使用_第2頁
Delphi 中動態(tài)鏈接庫(DLL)的建立和使用_第3頁
Delphi 中動態(tài)鏈接庫(DLL)的建立和使用_第4頁
Delphi 中動態(tài)鏈接庫(DLL)的建立和使用_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Delphi 中靜態(tài)鏈接庫DLL的創(chuàng)坐戰(zhàn)操縱閉鍵詞:靜態(tài)鏈接庫是一個(gè)可以大概被使用程序戰(zhàn)此中的DLL挪用的過程戰(zhàn)函數(shù)的會萃體,它里面包露的是群寡代碼或資本。因?yàn)镈LL代碼操縱了內(nèi)存同享妙技,正在某些處所inds也給了DLL一些更下的權(quán)限,果此DLL中可以真現(xiàn)一些一樣仄居程序所沒有能真現(xiàn)的成效,照真現(xiàn)inds的HK、ISAPI等。同時(shí),DLL借為沒有同語止間代碼同享供給了一條便當(dāng)?shù)穆纷?。果此DLL正在編程時(shí)使用較為廣泛,本文將介紹如何正在Delphi中創(chuàng)坐戰(zhàn)操縱DLL。一DLL庫內(nèi)存同享機(jī)制從操縱成果看,DLL戰(zhàn)unit很像,它們皆可以被此中工程模塊所挪用,但兩者正在內(nèi)部的真現(xiàn)機(jī)制上確存正在著沒

2、有同。假設(shè)一個(gè)程序模塊頂用uses語句援用了某個(gè)unit,編譯程序正在編譯該模塊時(shí),便會連同unit一同編譯,并把編譯后的可真止代碼鏈接到本程序模塊中,那便是一個(gè)程序模塊可以大概挪用所援用unit中過程戰(zhàn)函數(shù)的去由本由。當(dāng)統(tǒng)一個(gè)unit被多個(gè)工程所援用時(shí),那么每一個(gè)工程中皆露有該unit的可真止代碼,當(dāng)露有該unit的多個(gè)工程同時(shí)真止時(shí),unit的可真止代碼會隨沒有同工程而屢次被調(diào)進(jìn)內(nèi)存,構(gòu)成內(nèi)存資本的黑搭。DLL那么沒有同,它即使被某個(gè)工程挪用,編譯后借是自力的,也便是道編譯后,一個(gè)DLL庫構(gòu)成一個(gè)零丁的可真止文件,而沒有取任何此中的可真止文件毗鄰正在一同,果此DLL庫其真沒有附屬于某個(gè)特定

3、的工程,當(dāng)多個(gè)工程挪用統(tǒng)一個(gè)DLL庫時(shí)只要第一個(gè)工程把DLL庫調(diào)進(jìn)內(nèi)存,此中工程其真沒有反復(fù)調(diào)進(jìn)統(tǒng)一個(gè)DLL庫到內(nèi)存,而是到統(tǒng)一個(gè)同享內(nèi)存區(qū)讀齲并且,DLL的真止代碼是正在程序運(yùn)轉(zhuǎn)時(shí)期靜態(tài)調(diào)進(jìn)的,而沒有是如unit正在程序運(yùn)轉(zhuǎn)時(shí)便取全部工程一同調(diào)進(jìn)內(nèi)存。多么便可消弭unit帶去的一樣代碼多處占用內(nèi)存的弊玻兩Delphi中DLL庫的創(chuàng)坐正在Delphi狀況中,編寫一個(gè)DLL同編寫一個(gè)一樣仄居的使用程序并出有太年夜的區(qū)分。終究上做為DLL主體的DLL函數(shù)的編寫,除正在內(nèi)存、資本的打面上有所沒有同中,其真沒有需要此中特別的本領(lǐng)。一樣仄居工程文件的格局為:prgra工程題目;uses子句;程序體而DL

4、Ls工程文件的格局為:library工程題目;uses子句;exprts子句;程序體它們主要的區(qū)分有兩面:1.一樣仄居工程文件的頭標(biāo)用prgra閉鍵字,而DLL工程文件頭標(biāo)用library閉鍵字。沒有同的閉鍵字照顧編譯器天死沒有同的可真止文件。用prgra閉鍵字天死的是.exe文件,而用library閉鍵字天死的是.dll文件;2.假設(shè)DLL要輸出供此中使用程序操縱的函數(shù)或過程,那么必須將那些函數(shù)或過程列正在exprts子句中。而那些函數(shù)或過程本人必須用exprt編譯指令舉止編譯。正在Delphi主菜單file中選ne.項(xiàng),正在彈出的窗心中單擊DLL圖標(biāo),便會自動給出DLL源模塊框架,以下:L

5、ibraryprjet1;.注釋.usesSysUtils,lasses;beginend.接下去便可正在USES戰(zhàn)begin之間參取念正在該DLL中真現(xiàn)的過程戰(zhàn)函數(shù)的定義,并用exprt戰(zhàn)exprts保字把它們引出,以便此中模塊援用,正在begin戰(zhàn)end之間參取初初化代碼,初初化代碼是用去對DLL變量初初化的。應(yīng)注意,即使無初初化代碼begin取end也沒有成省略,以下例:libraryinax;funtinin(X,Y:Integer):Integer;exprt;beginifXYthenin:=Xelsein:=Y;end;funtinax(X,Y:Integer):Integer;

6、exprt;beginifXYthenax:=Xelseax:=Y;end;exprtsinindex1,axindex2;beginend.經(jīng)編譯后,并以inax.DLL存盤后,一個(gè)DLL庫文件便構(gòu)成了。三DLL庫的訪謁訪謁DLL庫有兩種方法,一種是靜態(tài)援用,另外一種是靜態(tài)援用。用靜態(tài)援用那種要發(fā)拆進(jìn)DLL要做兩件事情:為DLL庫創(chuàng)坐一個(gè)輸進(jìn)單元,和用USES把輸進(jìn)單元毗鄰到要操縱DLL函數(shù)的程序模塊中。為DLL庫創(chuàng)坐的輸進(jìn)單元取偉大的單元的區(qū)分僅正在于:正在它的接心處聲明的過程、函數(shù),其真沒有正在它的真現(xiàn)部分給出真實(shí)的真今世碼,而是用external閉鍵字把過程、函數(shù)的真現(xiàn)細(xì)節(jié)拜托給內(nèi)部D

7、LL模塊。external命令的操縱語法以下:predure/funtin過程/函數(shù)名;externalDLL模塊名;上里給出為上里創(chuàng)坐的inax.DLL庫寫的輸進(jìn)單元源文件testdll.pas,從中可看出輸進(jìn)單元取一樣仄居單元的一些沒有同,代碼以下所示:unittestdll;interfaeusesfuntinin(X,Y:Integer):Integer;funtinax(X,Y:Integer):Integer;ipleentatinfuntinin;externalinax.DLL;funtinax;externalinax.DLL;end.一個(gè)使用程序假設(shè)念挪用inax.DLL中

8、的函數(shù),只須正在其uses語句中參取testdll單元便可。靜態(tài)拆進(jìn)DLL,要用到inds的三個(gè)API函數(shù)。Ladlibrary、Freelibrary戰(zhàn)GetprAddress。ladlibrary函數(shù)用去拆進(jìn)DLL庫,其挪用格局以下:funtinladlbrary(DLLfileNae:Phar):THandle:當(dāng)沒有再需要一個(gè)DLL庫時(shí),應(yīng)挪用FreeLibrary函數(shù)將其釋放,以空出珍貴的內(nèi)存資本,其挪用格局以下:predureFreeLibrary(Libdule:THandle)Libdule為由LadLibrary挪用獲得的DLL庫句柄。正在用ladlbrary函數(shù)拆進(jìn)某個(gè)DL

9、L庫戰(zhàn)挪用FreeLibrary釋放該DLL庫之間的程序段中,可以操縱該DLL庫中的過程戰(zhàn)函數(shù),詳細(xì)操縱要發(fā)是:用GetprAddress函數(shù)把DLL庫中函數(shù)的所在傳遞給程序中某個(gè)函數(shù)變量,再用該變量真現(xiàn)DLL函數(shù)的挪用。GetprAddress函數(shù)聲名以下,funtinGetprAddress(Libdule:THandle:prnae:phar):TFarPr:以下例所示:typeTTieRe=rerdSend:Integer;inute:Integer;Hur:Integer;end;TGetTie=predure(varTie:TTieRe);THandle=Integer;varTie:TTieRe;Handle:THandle;GetTie:TGetTie;.beginHandle:=LadLibrary(DATETIE.DLL);ifHandle0thenbeginGetTie:=GetPrAddress(Handle,GetTie);ifGetTienilthenbeginGetTie(Tie);ithTiedriteLn(Thetieis,Hur,:,inute,:,S

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論