安装Delphi Package获取错误rtl170.bpl的错误

时间:2015-06-24 15:20:08

标签: delphi delphi-xe8 bpl

目前我将项目从Delphi XE迁移到XE8。 我们使用一个组件,但最新的版本是针对XE3的,因此我将代码更改并进行编译。 现在我想安装设计时包,但是我得到了rtl170.bpl丢失的错误。 没有人只将rtl170引用到rtl库。 我读了一些关于运行时包的内容,但是在这个项目中我没有项目选项中的包下的这个菜单项。有什么建议? 之前在此计算机上安装了Delphi XE,但在安装XE8之前我已将其卸载。

2 个答案:

答案 0 :(得分:1)

  

适用于XE3所以我接受代码并更改它直到它编译

通常,组件由两个BPL文件,一个运行时包和一个设计时包(使用运行时包)组成。组件库(如Raize,JediVCL,DevExpress等)由数十个BPL对组成。

使用一些工具检查DLL依赖项(示例:CFF Explorer或Microsoft Dependency Walker或WLX FileInfo)并检查组件BPL - 您必须确定组件的BPL中哪一个需要rtl170.bpl DLL

使用SysInternals Process Monitor记录BPL加载或者只扫描所有磁盘以获取这些BPL名称可能是一个有用的想法。你可能有类似的东西:

  1. 您尝试安装的新建设计时BPL(没有链接到rtl170)
  2. 新建的运行时BPL(也没有链接到rtl170)
  3. 较旧的运行时BPL,由XE3构建并引用rtl170。如果它存在,则(1)BPL可能找到并加载(3)而不是(2),所以无论你重新编译多少(2)它都没有效果。
  4. 这只是一种可能的混淆场景,但肯定会发生。 确保没有遗留下来的xe3制造的BPL。

    有时只是查找和删除旧的BPL修复问题(例如 - 修复了XE2的UP4 :-D)。

    对于其他人,我们认为你发现不是旧的流氓BPL,而你还是新的XE8编译的BPL仍在参考rtl170。

    然后,如果您拥有该组件的完整源代码 - 删除(或暂时移走)所有DCP / DCU文件并强制从所有软件包的源代码编译可能会有所帮助。同样,您可以使用SysInternals Process Monitor等工具对Delphi编译软件包的文件访问日志进行快照。有时它会显示出由于不同的原因,您的德里会忽略DPK / PAS源文件,而是使用旧的DCU / DCP进行编译。

    说实话,XE8与XE3的DCU / DCP兼容的可能性很小,这仍然是研究你的情况的途径之一。

    现在我们假设您的组件中没有任何dcu / dcp / bpl文件显式位于您可以访问Delphi的HDD上。假设你是编译组件的唯一方法 - 从源代码100%完成。

    阅读本文:http://docwiki.embarcadero.com/RADStudio/en/Compiler_directives_for_libraries_or_shared_objects_%28Delphi%29

    有可能 - 这些设置在您的错误包的.DPK文件(或任何其他Pascal源)中,或者在您的错误包的.DPROJ文件中(然后可以在IDE项目选项对话框中或通过任何XML访问它们)编辑)。或者在DPROJ和PAS / DPK文件中,有时候。

    您要找到这些设置并将其从m170修复为xe8 BPL的实际后缀

答案 1 :(得分:0)

我有同样的问题,花了一段时间才找到解决方案。我目前的Delphi版本是XE6,但是当我尝试安装特定的BPL时,它一直想要使用rtl170。 BPL编译正常但不会安装。曾经有一台XE3在机器上,但我已经卸载了它。

原来我在C:\ Windows \ sysWOw64中有一个相同运行时BPL的旧副本。一旦我删除了sysWOw64中的副本,XE6就不再抱怨了。