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公开的列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |