我想与您确认一个问题。
方案如下。我们有两个系统。一个旧的,它是一个独立的可执行文件,另一个是全新的,用软件包模块化。
是否可以在独立应用程序中动态加载包?
需要加载在我的旧应用程序中具有表单和显示的包。
在我的测试中,问题是独立应用程序表单类中的加载包是零。
以下代码说明了情况:
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;
荷。
答案 0 :(得分:0)
是否可以在独立应用程序中动态加载包?
是的。您需要遵守运行时包的规则。具体而言,所有包和主机可执行文件都使用相同版本的Delphi进行编译,并且都使用运行时包。并且为了能够使用主机中的GetClass
,您需要在包中调用RegisterClass
。本文似乎包含所有必要的详细信息:http://edn.embarcadero.com/cn/article/27178
关于您是否能够展示您的表格,这取决于您是否正确设计了您的包裹。
在评论中添加关键细节。您希望在没有运行时包的情况下构建独立应用程序。你不能这样做。如果要以这种方式使用运行时包,为了有一个共享类注册表,那么所有各方都必须使用运行时包。