Delphi中的包(二) 關於bpl

2021-04-01 18:46:27 字數 2435 閱讀 4968

------摘自:http://blog.csdn.net/soobey/archive/2005/08/29/467732.aspx

現在我們不得不寫自己的dpk工程,以更改地檢測我們的猜想。我們首先建立乙個project group,包含三個工程:

program projectexe;

uses

forms,

windows,

unitformmain in 'unitformmain.pas' ;

unit unitformmain;

inte***ce

uses

windows, stdctrls, forms, classes, controls;

type

tformmain = class(tform)

button1: tbutton;

procedure button1click(sender: tobject);

private

public

end;

varformmain: tformmain;

implementation

procedure tformmain.button1click(sender: tobject);

varlform:tform2;

end;

end.

package package1;

requires

vcl,

rtl;

contains

unitformanother in 'unitformanother.pas' ,

unitform1 in 'unitform1.pas' ;

end.

unit unitformanother;

inte***ce

uses

forms;

type

tformanother = class(tform)

private

public

end;

implementation

end.

unit unitform1;

inte***ce

uses

unitformanother;

type

tform1 = class(tformanother)

private

public

end;

implementation

end.

package package2;

requires

rtl,

vcl;

contains

unitform2 in 'unitform2.pas' ;

end.

unit unitform2;

inte***ce

uses

unitformanother;

type

tform2 = class(tformanother)

private

public

end;

implementation

end.

小技巧:delphi對project group的編譯是按照列表順序從上到下進行的,因此在有些時候,被require或者use的檔案如果在下面,那麼可能會提示找不到檔案。因此最好用文字編輯器調整一下bpg檔案中的列表順序。

因此,現在基本可以得到結論:

集合b中的unit,如果存在於集合a中,則在連線時不需要對應的dcu檔案,有bpl和bpc就好了。而b-a部分,要麼必須有pas檔案,要麼需要有dcu檔案。

現在,編譯和連線的問題基本解決了,現在來研究載入。載入有兩種,一種是自動的,由delphi控制;一種是手動的,在程式中寫loadpackage。先來搞清楚什麼情況下會自動載入library。

測試是這樣的,projectexe use unitform1, package2 contains unitform2 requires package1,package1 contains unitform1和unitformanother。在projectexe的package list裡面僅有package2。執行結果是:載入的包有rtl、vcl和package1,package2並沒有出現。也就是說,自動裝入記憶體的包是那些存在於a集合中,且跟b集合有交集的包。所有想要完全手工載入包,還必須要注意一些問題,起碼它不能直接和間接地被require,包中的unit也不能在use裡面出現。換句話說,呼叫者完全不知道被呼叫包的情況下才能避免自動裝載。

既然呼叫者完全不知道被呼叫的包的資訊,憑什麼去呼叫呢?delphi裡面似乎沒有標頭檔案之類的東西。怎麼獲取這個包的介面呢?

Delphi中的包(三) bpl和dll

摘 自 http blog.csdn.net soobey archive 2005 08 30 468017.aspx 曾經聽說過 bpl就是一種特殊的dll 但是沒有想到這句話具有這麼大的意義。最近看到有人在屬於某個dpk的unit裡面寫export語句,覺得非常驚奇。但是遍查delphi的he...

Delphi中BPL包的使用,個人經驗

用包可以分模組編寫功能,方便開發階段的組織,同時也便於後期的公升級維護,使公升級的粒度越來越少 也是用了c 的類庫之後的感悟 下面寫幾點經驗 一 不要用delphi本身的bpl,把delphi自身的包中的單元取出來,合併成乙個bpl。二 不要直接用三方控制項的安裝包,也要自己建乙個包,把單元檔案中加...

delphi中採用bpl共享模組的幾點釋疑

1.loadpackage做了哪些事情?loadpackage的程式碼可以從delphi的原始碼 sysutils.pas 中找到 function loadpackage const name string hmodule begin result safeloadlibrary name 這裡使...