簡體   English   中英

Delphi XE2無法獲得BPL插件工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM