轉載:http://www.cnblogs.com/gxch/archive/2011/04/23/bpl.html
為什么要使用包?
答案很簡單:因為包的功能強大。設計期包(design-time package)簡化了自定義組件的發布和安裝;而運行期包(run-time package)則更是給傳統的程序設計注入了新鮮的力量。一旦把可重用的代碼編譯為運行期庫中,你就可以在多個應用程序中共享它們。所有應用程序都可以通過包訪問標准組件,Delphi自己就是這么干的。因為應用程序不必在可執行文件中單獨復制一份組件庫,這樣就大大節省了系統資源和磁盤空間。此外,包還可以減少花費在編譯上的時間,因為你只需編譯應用程序特有的代碼。
如果可以動態的使用包,那么我們還可以獲得更多的好處。包提供了一種新穎的模塊化方法來開發應用程序。有些時候你也許想把某些模塊作為應用程序的可選部件,例如一個記帳系統附帶一個可選的HR模塊。某些情況下,你只需安裝基本的應用程序,而在另外一些情況下你就可能需要額外安裝HR模塊。這種模塊化的方法可以通過包技術很容易的實現。在過去,這只能通過動態裝載DLL實現,但是使用Delphi的包技術,你就可以把應用程序的各個模塊類型分別打“包”成捆。特別是從包中創建的類對象則屬於應用程序所有,因此可以與應用程序中的對象交互。
運行期包與應用程序
許多開發者只把Delphi包看作放組件的地方,事實上包可以(而且也應該)應用於模塊化應用程序設計。
為了演示如何用包來模塊化你的應用程序,我們創建一個例子:
1、 新建一個具有兩個窗體的Delphi程序:Form1和Form2;
2、 將Form2從自動創建窗體列表中移除(Project |Options | Forms);
3、 在Form1上放一個按鈕,並且在按鈕的OnClick事件處理器中輸入如下代碼:
with TForm2.Create(Application) do
begin
ShowModal;
Free;
End;
4、記住添加Unit2到Unit1的uses子句中;
5、 保存並運行工程。
我們創建了一個簡單的應用程序,它顯示一個帶按鈕的窗體,點擊這個按鈕則會創建並顯示出另一個窗體。
但是如果想將上述例子中的Form2包含在一個可重用模塊中,並使它依然可以正常工作,我們該怎么辦呢?
答案是:包!
要為Form2創建包需要以下工作:
1、 打開工程管理器(View | Project Manager);
2 、右擊Project Group,選擇“Add NewProject...”;
3、在“New”項目列表中選擇“Package”;
4、 現在你應該可以見到包編輯器;
5、選擇“Contains”項目,然后點擊“Add”按鈕;
6、 然后點擊“Browse...”按鈕,並選擇“Unit2.pas”;
7、現在包中應該包含了“Unit2.pas”單元;
8、 最后保存並編譯包。
現在我們完成了這個包。在你的Project\BPL目錄中應該有一個名叫“package1.bpl”的文件。(BPL是Borland Package Library的縮寫,DCP是Delphi CompiledPackage 的縮寫。)
這個包已經完成了。現在我們需要打開包選項開關
並重新編譯原先的應用程序。
1、 在工程管理器中雙擊“Project1.exe”以選中該工程;
2、 右擊並選擇“Options...”(你也可以從菜單中選擇Project | Options...);
3、 選中“Packages”選項頁;
4、 選中“Build with runtime packages”檢查框;
5、 編輯“Runtime packages”編輯框:“Vcl50;Package1”,並點擊“OK”按鈕;
6、 注意:不要從應用程序中移除Unit2;
7、 保存並運行應用程序。
應用程序會象從前一樣運行,不過區別可以從文件的大小上看出來。
Project1.exe現在只有14K大小,而從前則是293K。如果你用資源瀏覽器查看EXE和BPL文件的內容,你就會發現Form2的DFM和代碼現在都保存在包中。
===============
可以更改包的輸出路徑,和exe對包的引用路徑。 例子:G:\D7\delphi7-2015-2\BPL包