救急,Class not found 错误

morowind 2008-09-01 02:29:22
我的程序用Delphi7开发,窗口类都被分开写在几个BPL包里,用RegisterClass注册了,主程序启动后加载,调用时用FindClass找到窗口类再创建。现在问题是,程序在我们开发环境下运行一切正常,但是打包在用户的机器上安装后,启动时一切正常,主界面都能出来,但是打开BPL包里的窗口时,就会报Class ... Not Found的错误,就是窗口类没找到。
后来怀疑是BPL包没有正常加载,但是在程序启动时做日志显示,所有的BPL都正常加载了。现在小弟黔驴技穷了,各位大侠救救急,我已经快疯了~
...全文
230 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2008-09-02
  • 打赏
  • 举报
回复
RegisterClass是将载入的类信息存在内存里一个表结构里..这个结构在VCL70.BPL包里
如果要程序所有模块都共享唯一的一个表结构.
那么就必须做到,所有模块对于VCL70.BPL是动态载入.
如果你把这部分静态链接了..它就各顾个了.
也就是编译那些模块的时候,编译选项的PACKAGES页里,要勾选上RUNTIME PACKAGES,并保证VCL这个包在下面列表里.

想想这过程, 理解清楚了,你的问题就该迎刃而解了.



followwater 2008-09-02
  • 打赏
  • 举报
回复
dll,exe都要使用运行期包,这样他们才会共用类信息
Harryfin 2008-09-02
  • 打赏
  • 举报
回复
不过说VCL70.BPL也不能算错,不准确而已。因为VCL70引用了RTL70 - -
Harryfin 2008-09-02
  • 打赏
  • 举报
回复
楼上错了,是在RTL70.BPL里。

楼主请先确定以下几点:
1、主程序静态引入了RTL包(BuildWithRuntimePackage里选择)。
2、窗体包都带上RTL包(requires里面默认都有的)
3、该发布的包都发布了
4、LoadPackage成功
5、类名正确
Qyg 2008-09-01
  • 打赏
  • 举报
回复
我听着都快疯了

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧