delphi – LoadPackage调用initialize,但registerClass不起作用

前端之家收集整理的这篇文章主要介绍了delphi – LoadPackage调用initialize,但registerClass不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个单元定义TBla和初始化部分中的以下代码
initialization
  RegisterClass(TBla);
  showMessage('registered');

这个单元在一个包内.好.

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

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

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

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

有任何想法吗?

解决方法

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

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

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

猜你在找的Delphi相关文章