[英]Delphi XE2 Cannot get BPL plugin work
我試圖用XE2實現一個簡單的模塊系統,但無法使其正常工作。 當我嘗試在IDE下運行它時,我可以從LoadPackage()
獲取一個句柄,但是不能使用GetClass()
獲得該類(即使它是BPL初始化部分中的RegisterClass())。 當我嘗試在Windows下運行它時,出現“此應用程序由於找不到rtl160.bpl而無法啟動”錯誤,甚至無法加載該程序包。
模塊代碼
type
TfrModule = class(TFrame)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.dfm}
procedure TfrModule.Button1Click(Sender: TObject);
begin
ShowMessage('Hello');
end;
initialization
RegisterClass(TfrModule);
ShowMessage('Registered');
finalization
UnregisterClass(TfrModule);
ShowMessage('Unregistered');
另外,初始化部分沒有執行,因為我沒有看到“已注冊”消息框。
主機應用程序是這樣的;
var
hMod: HModule;
fcMod: TPersistentClass;
frMod: TFrame;
procedure TForm4.Button1Click(Sender: TObject);
begin
hMod := LoadPackage('Module.bpl');
if (hMod = 0) then Exit;
fcMod := GetClass('TfrModule');
if Assigned(fcMod) then
begin
frMod := TFrame(fcMod.Create);
frMod.Parent := Panel1;
end;
end;
主機應用程序已與運行時程序包True鏈接。 模塊沒有運行時程序包選項。
另一個問題。 我在網上看到了這個基本示例,但是我計划添加更多類似的模塊,如果我嘗試在初始化時將第二個模塊的TfrModule類RegisterClass()
到RegisterClass()
會發生什么? 如果我需要為每個模塊使用不同的名稱,則模塊毫無意義。 我的意思是,如果主機必須確切知道模塊的類是什么樣的。
這里一切都很好。 主機應用僅使用運行時軟件包vcl和rtl。 該模塊還需要rtl和vcl軟件包。 這些軟件包也必須部署。 我看到一個“已注冊”消息框,GetClass函數也被成功調用...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.