从独立应用程序加载运行时包

时间:2014-09-18 18:57:17

标签: forms delphi runtime packages

我想与您确认一个问题。

方案如下。我们有两个系统。一个旧的,它是一个独立的可执行文件,另一个是全新的,用软件包模块化。

是否可以在独立应用程序中动态加载包?

需要加载在我的旧应用程序中具有表单和显示的包。

在我的测试中,问题是独立应用程序表单类中的加载包是零。

以下代码说明了情况:

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;

荷。

1 个答案:

答案 0 :(得分:0)

  

是否可以在独立应用程序中动态加载包?

是的。您需要遵守运行时包的规则。具体而言,所有包和主机可执行文件都使用相同版本的Delphi进行编译,并且都使用运行时包。并且为了能够使用主机中的GetClass,您需要在包中调用RegisterClass。本文似乎包含所有必要的详细信息:http://edn.embarcadero.com/cn/article/27178

关于您是否能够展示您的表格,这取决于您是否正确设计了您的包裹。


在评论中添加关键细节。您希望在没有运行时包的情况下构建独立应用程序。你不能这样做。如果要以这种方式使用运行时包,为了有一个共享类注册表,那么所有各方都必须使用运行时包。