LoadPackage调用initialize,但registerClass不起作用

时间:2009-03-31 17:53:18

标签: delphi delphi-7

我有一个单元,它定义TBla和初始化部分中的以下代码:

initialization
  RegisterClass(TBla);
  showMessage('registered');

此单元位于包装内。确定。

在按钮上单击我的应用程序,我有以下代码:

  LoadPackage('C:\temp\testes_packs\pack1\Package1.bpl');
  pc := GetClass('TBla');
  if pc = nil then
    ShowMessage('didnt work');

当我点击按钮时,会显示“已注册”消息。但是,'没有工作'也显示出来。这表示初始化被调用但由于某种原因寄存器类不起作用。

好的,为了证明LoadPackage是问题,我将我的单元(包含TBla类)直接包含在我的项目中并删除了loadPackage行,并且tada显示了'registered'消息并且getClass正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:13)

您的包需要在“需求”列表中包含“rtl”和“vcl”。这样,类注册列表将是共享包中的列表,而不是您自己的包的私有。

此外,您的应用程序需要编译为使用运行时包。特别是,“rtl”和“vcl”包需要在其运行时包列表中。

如果不同时执行这两项操作,则一个模块使用的类注册列表将与其他模块使用的列表不同。它们都必须使用相同的方法,并且这样做的方法是确保两个模块共享RTL公开的列表。