0

我正在浏览我的大部分应用程序并将它们移植到 D2009,并且我有一个使用动态包的应用程序。对于我的生活,我无法让我的主机应用程序识别包中注册的类。我跟踪并调用了正在加载的包中的初始化部分并调用了 RegisterClasses,但是当我调用 GetClass() 时,这些类不可用。有没有人可以启发我了解可能发生的事情?我已经研究并查看了 D2009 版本和动态软件包是否存在任何问题,但到目前为止我一无所获。我开始怀疑我的 Delphi 安装是否损坏或其他问题。

TIA

4

2 回答 2

2

如果您使用的是第 3 方内存管理器,请确保它已被证明可以与 D2009(实际上是 2007 及更高版本)一起使用。

使用 FastMM(这是自 2007 年以来的默认 MM),您必须设置在 FastMM4Options.inc 中定义的 UseRuntimePackages

于 2009-06-12T22:46:05.007 回答
0

确保完成以下步骤:

  • 在 Delphi 中创建一个新包;
  • 在此包中插入表格;
  • 在表单中插入“初始化”部分并使用 RegisterClass 方法。(注册类(TForm1));不要忘记“T”。
  • 保存并编译包;
  • 关闭所有;
  • 将 .bpl 文件 (c:\Users\Public\Documents\RAD Studio\5.0\Bpl) 复制到应用程序文件夹;
  • 在 Delphi 中创建一个新的应用程序;
  • 进入项目>选项>包,并选中“使用运行时包构建”框;
  • 在文本字段中只保留“vcl;rtl”,然后单击“确定”按钮;
  • 插入一个按钮;
  • 在按钮的源代码中,插入代码:

过程 TForm1.Button1Click(Sender: TObject);

变量

包模块:HModule;A类:TPersistentClass;

开始

PackageModule := LoadPackage('Package1.bpl');

如果 PackageModule <> 0 则开始 AClass := GetClass('TForm2');

if AClass <> nil then
  with TComponentClass(AClass).Create(Application)
    as TCustomForm do
  begin
    ShowModal;
    Free;
  end;

UnloadPackage(PackageModule);

结尾;

结尾;

  • 编译应用程序。=)
于 2009-09-09T13:16:21.473 回答