Delphi 无法安装设计时软件包:缺少@Classes@TStream@从vcl50.bpl写入$qqrpxvi 短版 我的设计时软件包无法安装 因为我的运行时包库是bpl 需要导出@Classes@TStream@从vcl50.bpl 这是不存在的 长版本
尝试安装设计时软件包时,Delphi 5会收到一个加载程序错误: 程序入口点@Classes@TStream@在动态链接库c:\program files(x86)\borland\delphi5\Projects\Bpl\AvataDateTimePickerd5.Bpl中找不到Write$qqrpxvi 清除加载程序显示的错误对话框后,Delphi将显示相同错误的自己版本: 所以我查了一下档案 我使用dependens检查dll中的导出:Delphi 无法安装设计时软件包:缺少@Classes@TStream@从vcl50.bpl写入$qqrpxvi 短版 我的设计时软件包无法安装 因为我的运行时包库是bpl 需要导出@Classes@TStream@从vcl50.bpl 这是不存在的 长版本,delphi,delphi-5,Delphi,Delphi 5,尝试安装设计时软件包时,Delphi 5会收到一个加载程序错误: 程序入口点@Classes@TStream@在动态链接库c:\program files(x86)\borland\delphi5\Projects\Bpl\AvataDateTimePickerd5.Bpl中找不到Write$qqrpxvi 清除加载程序显示的错误对话框后,Delphi将显示相同错误的自己版本: 所以我查了一下档案 我使用dependens检查dll中的导出: c:\program files (x86)\b
c:\program files (x86)\borland\delphi5\Projects\Bpl\AvatarDateTimePickerD5.bpl
果然,没有导出名为:
@Classes@TStream@Write@qqrpxvi
@Classes@TStream@Write@qqrpxvi
事实上,根本没有以@Classes开头的导出:
确保它加载的是正确的
因此,我使用进程监视器来确保它正在读取正确的文件。它是:
因此,请检查运行时构建
你会记得通常有两个包:
- contosogroberd5:运行时
- contosogroberd5d:设计时间
@Classes@TStream@Write@qqrpxvi
@Classes@TStream@Write@qqrpxvi
但相应的设计时包声称它需要这样的导入
他说不太清楚
如果我运行取决于设计时间bpl,我会看到失败的链:
- avataTimePickerd5d.bpl(设计时dll)
- AvataDateTimePickerd5.bpl(运行时dll)
- vcl50.bpl
- 缺少导出:
@Classes@TStream@阅读$qqrpvi
- 缺少导出:
@Classes@TStream@写入$qqrpxvi
- 缺少导出:
System32
”文件夹中:
C:\Windows\SysWOW64\vcl50.bpl
所以我检查了vcl50.bpl
的导出。没错,没有导出@Classes@TStream@写入$\uuuuuuuuuuuuuuuuuuuuuuu
:
它看起来像一个文件:
创建时间:2000年1月24日凌晨4:01
SHA-1:29398F5CD966335EB38377962B12780DDEA9DBDC
发生了什么事?@MartynA只是名称混乱。当链接器找到不匹配的.DCU文件而不是正确的文件时,有时会发生这种情况。通常通过搜索.dcu的所有实例并重命名或删除它们,然后进行生成来解决这个问题。在这种情况下,我将首先搜索您的驱动器,查找与您的两个软件包相关的所有.dcu(来自您自己源文件的任何内容)——不仅是您知道的文件夹,还有您的整个驱动器。UltraSearch(我最喜欢的新工具)能够快速查找所有142个版本的
dcu
(它直接扫描NTFS数据库)并删除它们。矛盾的是,我可以构建仅运行时软件包,但如果尝试安装仅运行时软件包(而不是错误地说这是仅运行时软件包且无法安装)TStream.Read()
和TStream.Write()
是抽象方法,它们在TStream
本身中没有实现,因此它们没有BPL导出是有意义的。不应该尝试直接导入这些方法。因此,您的运行时包在这方面有缺陷。至于它为什么这样做,我不知道。您的avataDateTimePickerd5.BPL
运行时包(实际上是任何包)应该在其requires
子句中包含rtl.dcp。(这就是导出类
单元的地方。)@MartynA这只是名称管理当链接器找到不匹配的.DCU文件而不是正确的文件时,有时会发生这种情况。通常可以通过搜索.DCU的所有实例并重命名或删除它们,然后进行生成来解决。在这种情况下,我首先在驱动器中搜索与这两个实例相关的所有.DCU您的软件包(来自您自己源文件的任何内容)-不仅是您知道的文件夹,还有您的整个驱动器。UltraSearch(我最喜欢的新工具)能够快速查找所有142个版本的dcu
(它直接扫描NTFS数据库),并删除它们。矛盾的是,我可以构建仅运行时的包,但如果尝试安装仅运行时的包(而不是错误地说这是仅运行时的包,无法安装)TStream.Read()
和TStream.Write()
是抽象方法,它们在TStream
本身中没有实现,因此它们没有BPL导出是有意义的。不应该尝试直接导入这些方法。因此,您的运行时包在这方面有缺陷。至于它为什么这样做,我不知道。您的avataDateTimePickerd5.BPL
运行时包(实际上是任何包)应该在其requires
子句中包含rtl.dcp(这就是导出类
单元的地方)。