加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:18:44 所属栏目:大数据 来源:网络整理
导读:我有一个单元定义TBla和初始化部分中的以下代码: initialization RegisterClass(TBla); showMessage('registered'); 这个单元在一个包内.好. 在按钮上单击我的应用程序,我有以下代码: LoadPackage('C:temptestes_packspack1Package1.bpl'); pc := GetC
我有一个单元定义TBla和初始化部分中的以下代码:
initialization
  RegisterClass(TBla);
  showMessage('registered');

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

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

LoadPackage('C:temptestes_packspack1Package1.bpl');
  pc := GetClass('TBla');
  if pc = nil then
    ShowMessage('didnt work');

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

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

有任何想法吗?

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读