如何识别Delphi包中的已注册类

时间:2009-06-12 09:08:38

标签: delphi packages

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

TIA

2 个答案:

答案 0 :(得分:2)

如果您使用的是第三方内存管理器,请确保它已经证明适用于D2009(实际上是2007及以上版本)。

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

答案 1 :(得分:0)

确保完成以下步骤:

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

程序TForm1.Button1Click(发件人:TObject);

VAR

PackageModule:HModule;   AClass: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);

端;

端;

  • 编译应用程序。 =)