日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

DELPHI的BPL使用

發布時間:2024/1/3 综合教程 49 生活家
生活随笔 收集整理的這篇文章主要介紹了 DELPHI的BPL使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

了解BPL和DLL的關系將有助于我們更好地理解DELPHI在構件制作、運用和動態、靜態編譯的工作方式。對初學DELPHI但仍對DELPHI開發不甚清晰的朋友有一定幫助。
第一部分:有關包的介紹
  一般我們編寫編譯一個DELPHI應用程序時,會產生一個EXE文件,也就是一個獨立的WINDOWS應用程序。很重要的一點:區別于Visual Basic,DELPHI產生的是預先包裹的應用程序是不需要大量的運行庫(DLL's)。
  假設:打開Delphi默認的工程(只有一個空白form),F9她將編譯生成一個大約295 KB (Delphi 5)的可執行文件。然后打開Project | Options,把‘Build with runtime packages’選上再編譯一下,EXE文件大小就只有15 KB左右了。
  我們編譯一個DELPHI應用程序時默認地沒有選擇'Build with runtime packages',編譯器將把程序運行所需要的代碼直接寫入你的EXE文件中,因此產生的程序是一個相對獨立的程序,并不需要任何附屬的支持文件(例如動態運行庫文件DLL),這也就知道了為什么DELPHI產生的應用程序為什么都那么大。
  要建立盡可能小的DELPHI程序,方法之一就要充分發揮Borland package libraries的作用,簡稱BPL。
先說什么是包?
  簡而言之,一個包就是一個在DELPHI的IDE環境中被DELPHI應用程序共享的特殊的動態鏈接庫。包允許我們通過多級應用將我們的程序的一部分當做一個分離的模塊供其他應用程序來共享。
  包大致可分為運行期包(Run-time packages)和設計期包(Design-time packages):

  運行期包-當運行程序時提供VCL和庫函數的支持,操作上很類似標準的動態鏈接庫。
  設計期包-用來在DELPHI的IDE環境安裝控件和為控件建立特殊的屬性編輯器。設計期包允許包含控件、屬性和控件編輯器等等,在IDE環境中,這類包是程序設計所必需的,也僅僅是DELPHI使用,并不和開發的應用程序一起分發。

  知道這些包的運用,我們也就知道了運行期包是如何做處理和它們對DELPHI程序員有什么幫助了。
  有一點必須說明:想很好地運用包并不要求你先成為一個成熟的控件編寫者。DELPHI編程初學者也可以和應該嘗試去接觸包的概念,這將有利于你更好地理解包和DELPHI的工作關系。
第二部分:適時運用包裹和DLL
  一般都認為加入WINDOWS操作系統中的動態運行庫是一種最有用最高效的應用。在WINDOWS系統中,很多應用程序同時運行可能會引起了內存方面的問題,很多程序執行相似的操作任務,但各自又由不同的代碼來控制并完成任務,動態運行庫的作用就是將你的執行程序中的這些代碼放到一個系統共享環境下的DLL中去。可能最為直觀的動態鏈接庫例子就是WINDOWS操作系統自己和它本身所帶的API了。
  動態鏈接庫通常都是用來集合過程(procedure)和函數(function)以供程序調用。當然我們在編寫動態鏈接庫的同時,也可以把一個DELPHI FORM放到一個DLL中去(例如一個AboutBox FORM),此外我們也可以在DLL中存儲程序所需要的資源(resources)。更多關于DELPHI如何操作使用動態鏈接庫,請參考相關書籍,不再贅述。
  在比較DLLs 和BPLs之前,我們先要知道可執行文件的2種代碼鏈接的方式:靜態鏈接和動態鏈接。
  靜態鏈接就是當一個DELPHI工程被編譯的時候,工程所需要的所有代碼將被直接鏈接入你的程序執行文件。結果就是執行文件將包含程序所需要使用到的所有單元(units),你也許會說這樣代碼有點冗長,因為在通常默認情況下,一個FORM單元的uses子句列舉了至少5個基本單元(如:Windows, Messages, SysUtils,...),盡管如此,DELPHI還是能夠智能地自動鏈接單元中真正要用到的代碼到工程代碼中,從而盡可能地減少了執行文件的大小。使用靜態鏈接,我們的應用程序就是一個相對獨立的程序,不需要任何額外的支持文件或動態鏈接庫(暫時不考慮BDE和ActiveX構件)。DELPHI中默認使用的就是靜態鏈接方式。
  動態鏈接就是應用程序將和標準的動態鏈接庫(DLLs)一起運行。動態鏈接方式不需要將代碼直接建立到每個應用程序中去,單獨為多個應用程序提供多線程的庫函數支持,任何程序運行期間才需用到的包才將被加載,更值得一提的是:程序在動態方式需要調用的包是自動加載的,因此你不需要專門寫加載包的代碼。
方法:簡單地選中在Project | Options 對話框中'Build with runtime packages'復選框后,再次編譯你的程序,你的程序代碼將自動鏈接到動態運行包,而不是將引用單元都靜態鏈接入你的工程執行文件。
  是選擇BPL 還是 DLL?區別又在哪里?
  你可能很奇怪為什么要選擇使用運行期包,而不是DLL,或者還有其他什么方法。
相對于DLL而言,包裹的概念是DELPHI開發中所特有的,就是說其他語言編寫的應用程序不能引用DELPHI建立的包裹。即使包是一種被DELPHI編寫的應用程序所使用的動態鏈接庫,它也同時提供給了DELPHI程序員更多的庫函數支持。
  通常我們在DELPHI中建立動態鏈接庫(DLLs)是用來存儲不同環境下應用程序所需要使用到的過程和函數,而包不僅能夠包含代碼單元(untits)、構件和FORMs,還能包含DELPHI中的類(classes)-這就使我們能夠在其中引用對象向導編碼(object oriented code)。在包裹中,我們可以保存完整的通用DELPHI構件,而動態運行庫(DLL's)對此則無能為力了。
  此外,在縮減程序代碼上,DLLs和BPLs扮演著同樣重要的角色,其主要原因就是在使用包裹或動態鏈接庫技術后,都直接地減少了程序的文件大小。當然,還要說明的是:執行程序需要加載的DLLs或BPLs也可能會是很龐大的。例如如果需要分發你的包裹文件(主要是VCL包,vcl50.BPL)至少有2MB左右。
  盡管如此,如果你是要分發共享同個包的多個應用程序,你就可以省很多事了。當用戶方系統中已經存在程序運行需要的部分文件(如:標準的DELPHI BPLs)后,就只需要下載程序的最小執行文件了。如果你的程序工程主要是通過INTERNET等方式分發和開展,那效率顯然有很大的提高。
同時,包的應用也節省系統內存,因為動態鏈接的結果就是:只有一個VCL被讀入內存供所有使用運行期包的DLEPHI應用程序使用。
  包裹的版本問題
  當你想升級你的動態鏈接庫時(改變其中一些執行函數),你可以簡單地編譯產生新的程序文件,并上載新版本文件,所有正在使用該動態鏈接庫的應用程序仍將工作(除非你已經將存在的舊版本程序去除)。
  換個角度來講,在升級新包裹文件的同時,不要忘記升級程序的執行文件。正如你所了解的,包裹文件就是一個單元文件(units)的集合,所有編譯過的單元文件(DCU)都含有版本信息,因此,除非我們有單元文件的源碼(source),否則我們不能在DELPHI4或5中使用編譯過的單元,所以一旦我們改變了單元文件中接口部分uses子句中列舉出的任一單元文件,該文件就需要重新編譯。編譯器將檢查DCU文件的版本信息,并決定單元是否需要重新編譯。因此我們不能在DELPHI5編譯的應用程序中使用在DELPHI6下編譯的包,任何為你的應用程序服務的包和你的應用程序必須在相同環境下編譯。
  因此,當給包裹命名的時要保留包裹名中包含有DELPHI的版本信息(如'AboutDP50',其中50就代表Delphi 5)。這可以有效防止文件版本的沖突問題,也可以避免很多不必要的麻煩,包使用者可以更清楚包的版本和包裹適用于哪個DELPHI編譯器。
  如果你要分發運行期或設計期包給其他DELPHI程序員,建議同時提供了.DCP(含有包的頭信息和各個單元文件)和.BPL文件,還有包中所包含的所有單元文件的.DCU文件。
第三部分:建立和使用運行期包
  建立一個包裹
  建立一個包很簡單,但在建包之前要做一些準備工作。首先,你需要知道你準備建立哪種類型的包文件:運行期包還是設計期包,或兩者都是;其次是,建立、調試,反復地測試你想放置到包中去的單元文件;最后,為建立的包裹文件命名,還有就是選擇一個合適的地方來存放文件。
  建立一個新的運行期包,按照以下步驟:
啟動DELPHI,并選擇File | Close All關閉默認的工程。
選擇File | New...,在"New items"對話框中的"new"頁面中雙擊Package圖標(如圖),就會出現包裹編輯器(如圖):包裹編輯器包含2個文件夾:Contains和Requires。
點擊Add按鈕,可以增加一個單元文件(構件或是一個簡單的代碼單元文件)。注意:你添加的是PAS源碼文件而不是編譯后的DCU文件。當你添加單元文件的同時,包中的單元的名字就顯示在包裹編輯器的Contains文件夾中了。如圖中添加了FindFile和PictureClip的單元文件。
打開Requires文件夾,展開的列表表示包裹所需要的包的DCP文件,包裹文件最基本的就需要引用含有絕大部分標準可視控件的vcl50.dcp文件。
當你添加完單元文件,單擊Options按鈕,在Description面板中的Usage options組中你需要選擇包裹種類:是設計期包,還是運行期包,或者兩者都是。如果選擇Runtime only(僅運行期包),其他包的使用者將無法將圖示2個構件安裝到IDE環境中去。
使用File | Save保存包工程文件(DPK),然后保存包文件,如AboutDP50,包裹文件的命名將很重要。
在包裹器中,單擊Compile按鈕來編譯包。
如果不出什么意外,編譯包后將建立一個包裹文件(BPL文件),期間你可能還要確定你必須增加的其他包裹(例如VCLX50),這些包都將在Requires文件夾中列出。
完成,Borland package library文件已經成功建立,就等著使用了。
  在包裹編輯器中有一個Install按鈕,就是用來將當前包裹安裝成一個設計期包的。如果包裹是run-time only(僅運行期包),那Install按鈕將無法使用。
  關于所建立的這些文件
  除了DPK文件和那些單元源碼文件,DELPHI還使用包裹的動態鏈接版本產生一個BPL文件和一個含有包內標識信息DCP文件,DCP文件就是包中所包含單元文件的編譯文件(DCU)的標識信息的集合。
  使用運行期包設計程序
  開始使用動態鏈接編寫應用程序時,不需要寫代碼去加載運行期包裹,只需要在Project | Options中做相關設置,選擇在Packages頁的Runtime Packages編輯框中的包裹列表,編譯程序時將自動鏈接。應用程序要使用到一個運行期包時,使用ADD按鈕來增加包裹文件。
注意:盡管一個應用程序被鏈接到運行期包,程序的USES子句所列出的單元文件也必須都是存在的,編譯運行期包裹只是告訴應用程序哪里可以找到構件代碼而已。
  當配置一個使用到運行期包裹的應用程序時,確定用戶擁有可執行文件和程序所需的庫文件(.BPL或.DLL)。如果庫文件在和EXE文件不同的目錄下,必須將其指定到系統所能到達的目錄。因此,最好的選擇就是WindowsSystem系統目錄。
  總而言之
  包裹使你能夠有彈性地選擇應用程序的分發方式,也使構件的安裝變簡單了,此外,使用包裹也減少了應用程序的文件大小,因此,使用包裹的開發方式還是具有不小的意義的。

總結

以上是生活随笔為你收集整理的DELPHI的BPL使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。