-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