-1
我想確認您的問題。從獨立應用程序加載運行時軟件包
該場景如下。我們有兩個系統。一個老版本,它是一個獨立的可執行文件,另一個是全新的,與軟件包模塊化的。
是否可以在獨立應用程序中動態加載包?
需要加載一個包含表單並顯示在我的舊應用程序中的包。
在我的測試中,問題是獨立應用程序窗體類中的加載包爲零。
下面的代碼說明了情況:
Procedure TForm3.LoadPackageTest;
Const
CClass = 'TAboutBox';
Var
phm: HModule;
LFormClass: TPersistentClass;
LForm: TCustomForm;
Begin
phm := LoadPackage('C:\_Dev\MyProjTest\forminbpl\BPLS\TestPack.bpl');
If phm <> 0 Then
Try
//the problem!!!
//In StandAlone application, not found class.
LFormClass := TPersistentClass(GetClass(CClass));
If Assigned(LFormClass) Then
Begin
LForm := TCustomForm(TComponentClass(LFormClass).Create(Nil));
LForm.ShowModal;
LForm.Free;
End;
Finally
UnloadPackage(phm);
End
Else
ShowMessage('Package not found');
End;
感激。
大衛,謝謝你的回答。關於軟件包的結構,它是沒問題的。發生的問題是,當我在獨立應用程序中加載包時,找不到表單類。 在我的應用程序獨立,如果我將它設置爲「運行時包」,以便一切工作正常。 – Delphiman 2014-09-18 19:18:17
哦,現在你已經改變了這個問題。你最初問是否可能。你現在在問什麼?我的猜測是你沒有在包裏註冊這門課。你在包裝上做了什麼,'RegisterClass('TAboutBox')'? – 2014-09-18 19:20:02
嗨大衛。關於你的問題,是的,我在Package中註冊了課程「TAboutBox」。好的。對不起,也許我一直無法解釋它。問題是這樣的。如果我嘗試打開這個包到EXE中而沒有檢查包中的「生成運行時包」選項不起作用。只有當我選中「Build runtime packages」選項時纔有效。 我的問題是是否有可能從另一個應用程序打開一個包,但是在獨立應用程序(Build runtime packages = False)中打開一個包。 – Delphiman 2014-09-18 19:30:11