LoadPackage调用初始化,但的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');
当我点击按钮的“注册”消息显示出来。但是,“没有工作”也表示。这表明,被称为初始化沃斯但由于某种原因寄存器类别没有工作。
确定,以证明该LoadPackage是问题,我包括我的单元(包含TBLA类)直接到我的项目和除去loadPackage线和,多田的“注册”消息显示和的getClass工作
任何想法?
解决方案
您包需要包括在其“需要”列表“RTL”和“VCL”。这样,类登记名单将是一个共享包,而不是仅对您自己的包。
此外,您的应用程序需要被编译为使用运行时包。特别地,“RTL”和“VCL”的包必须是其运行时包的列表上。
如果没有这样做既那些东西,由一个模块所使用的类登记列表将不与由其它模块使用的列表。它们都必须使用同一个,而做到这一点的方式,以确保两个模块都共享由RTL公开的列表。
不隶属于 StackOverflow