delphi中調(diào)用dll知識(shí)

delphi中調(diào)用dll知識(shí)

ID:39549774

大?。?8.00 KB

頁(yè)數(shù):17頁(yè)

時(shí)間:2019-07-06

delphi中調(diào)用dll知識(shí)_第1頁(yè)
delphi中調(diào)用dll知識(shí)_第2頁(yè)
delphi中調(diào)用dll知識(shí)_第3頁(yè)
delphi中調(diào)用dll知識(shí)_第4頁(yè)
delphi中調(diào)用dll知識(shí)_第5頁(yè)
資源描述:

《delphi中調(diào)用dll知識(shí)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、Delphi環(huán)境中編寫調(diào)用DLL的方法和技巧提起DLL您一定不會(huì)陌生,在Windows中有著大量的以DLL為后綴的文件,它們是保證Windows正常運(yùn)行和維護(hù)升級(jí)的重要保證。(舉個(gè)例子,筆者的Win95System目錄下盡有500多個(gè)DLL文件。)其實(shí),DLL是一種特殊的可執(zhí)行文件。說(shuō)它特殊主要是因?yàn)橐话闼疾荒苤苯舆\(yùn)行,需要宿主程序比如*.EXE程序或其他DLL的動(dòng)態(tài)調(diào)用才能夠使用。簡(jiǎn)單的說(shuō),在通常情況下DLL是經(jīng)過(guò)編譯的函數(shù)和過(guò)程的集合。使用DLL技術(shù)主要有以下幾個(gè)原因:一、減小可執(zhí)行文件大小?! LL技術(shù)的產(chǎn)生有很

2、大一部分原因是為了減小可執(zhí)行文件的大小。當(dāng)操作系統(tǒng)進(jìn)入Windows時(shí)代后,其大小已經(jīng)達(dá)到幾十兆乃至幾百兆。試想如果還是使用DOS時(shí)代的單執(zhí)行文件體系的話一個(gè)可執(zhí)行文件的大小可能將達(dá)到數(shù)十兆,這是大家都不能接受的。解決的方法就是采用動(dòng)態(tài)鏈接技術(shù)將一個(gè)大的可執(zhí)行文件分割成許多小的可執(zhí)行程序。二、實(shí)現(xiàn)資源共享?! ∵@里指的資源共享包括很多方面,最多的是內(nèi)存共享、代碼共享等等。早期的程序員經(jīng)常碰到這樣的事情,在不同的編程任務(wù)中編寫同樣的代碼。這種方法顯然浪費(fèi)了很多時(shí)間,為了解決這個(gè)問(wèn)題人們編寫了各種各樣的庫(kù)。但由于編程語(yǔ)言和環(huán)境

3、的不同這些庫(kù)一般都不能通用,而且用戶在運(yùn)行程序時(shí)還需要這些庫(kù)才行,極不方便。DLL的出現(xiàn)就像制定了一個(gè)標(biāo)準(zhǔn)一樣,使這些庫(kù)有了統(tǒng)一的規(guī)范。這樣一來(lái),用不同編程語(yǔ)言的程序員可以方便的使用用別的編程語(yǔ)言編寫的DLL。另外,DLL還有一個(gè)突出的特點(diǎn)就是在內(nèi)存中只裝載一次,這一點(diǎn)可以節(jié)省有限的內(nèi)存,而且可以同時(shí)為多個(gè)進(jìn)程服務(wù)。三、便于維護(hù)和升級(jí)?! 〖?xì)心的朋友可能發(fā)現(xiàn)有一些DLL文件是有版本說(shuō)明的。(查看DLL文件的屬性可以看到,但不是每一個(gè)DLL文件都有)這是為了便于維護(hù)和升級(jí)。舉個(gè)例子吧,早期的Win95中有一個(gè)BUG那就是在閏

4、年不能正確顯示2月29日這一天。后來(lái),Microsoft發(fā)布了一個(gè)補(bǔ)丁程序糾正了這個(gè)BUG。值得一提的是,我們并沒(méi)有重裝Win95,而是用新版本的DLL代替了舊版本的DLL。(具體是哪一個(gè)DLL文件筆者一時(shí)想不起來(lái)了。)另一個(gè)常見(jiàn)的例子是驅(qū)動(dòng)程序的升級(jí)。例如,著名的DirectX就多次升級(jí),現(xiàn)在已經(jīng)發(fā)展到了6.0版了。更妙的是,當(dāng)我們?cè)噲D安裝較低版本的DLL時(shí),系統(tǒng)會(huì)給我們提示,避免人為的操作錯(cuò)誤。例如我們升級(jí)某硬件的驅(qū)動(dòng)程序時(shí),經(jīng)常碰到Windows提示我們當(dāng)前安裝的驅(qū)動(dòng)程序比原來(lái)的驅(qū)動(dòng)程序舊。四、比較安全。這里說(shuō)的安全

5、也包括很多方面。比如,DLL文件遭受病毒的侵害機(jī)率要比普通的EXE文件低很多。另外,由于是動(dòng)態(tài)鏈接的,這給一些從事破壞工作的“高手”們多少帶來(lái)了一些反匯編的困難?!         〉诙略贒elphi中編寫DLLtop  注意:在這里筆者假定讀者使用的是Delphi3或Delphi4開(kāi)場(chǎng)白說(shuō)了那么多,總該言歸正傳了。編寫DLL其實(shí)也不是一件十分困難的事,只是要注意一些事項(xiàng)就夠了。為便于說(shuō)明,我們先舉一個(gè)例子。libraryDelphi;usesSysUtils,Classes;functionTestDll(i:inte

6、ger):integer;stdcall;beginResult:=i;end;exportsTestDll;beginend.  上面的例子是不是很簡(jiǎn)單?熟悉Delphi的朋友可以看出以上代碼和一般的Delphi程序的編寫基本是相同的,只是在TestDll函數(shù)后多了一個(gè)stdcall參數(shù)并且用exports語(yǔ)句聲明了TestDll函數(shù)。只要編譯上面的代碼,就可以得到一個(gè)名為Delphi.dll的動(dòng)態(tài)鏈接庫(kù)?,F(xiàn)在,讓我們來(lái)看看有哪些需要注意的地方。一、在DLL中編寫的函數(shù)或過(guò)程都必須加上stdcall調(diào)用參數(shù)。在Delph

7、i1或Delphi2環(huán)境下該調(diào)用參數(shù)是far。從Delphi3以后將這個(gè)參數(shù)變?yōu)榱藄tdcall,目的是為了使用標(biāo)準(zhǔn)的Win32參數(shù)傳遞技術(shù)來(lái)代替優(yōu)化的register參數(shù)。忘記使用stdcall參數(shù)是常見(jiàn)的錯(cuò)誤,這個(gè)錯(cuò)誤不會(huì)影響DLL的編譯和生成,但當(dāng)調(diào)用這個(gè)DLL時(shí)會(huì)發(fā)生很嚴(yán)重的錯(cuò)誤,導(dǎo)致操作系統(tǒng)的死鎖。原因是register參數(shù)是Delphi的默認(rèn)參數(shù)。二、所寫的函數(shù)和過(guò)程應(yīng)該用exports語(yǔ)句聲明為外部函數(shù)?! ≌绱蠹铱吹降?,TestDll函數(shù)被聲明為一個(gè)外部函數(shù)。這樣做可以使該函數(shù)在外部就能看到,具體方法是單

8、激鼠標(biāo)右鍵用“快速查看(QuickView)”功能查看該DLL文件。(如果沒(méi)有“快速查看”選項(xiàng)可以從WindowsCD上安裝。)TestDll函數(shù)會(huì)出現(xiàn)在ExportTable欄中。另一個(gè)很充分的理由是,如果不這樣聲明,我們編寫的函數(shù)將不能被調(diào)用,這是大家都不愿看到的。三、當(dāng)使用了長(zhǎng)字符串類型的參數(shù)、變

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(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)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。