组件TSomething无法通过包something_design.bpl注册,因为它已经被包stuff_design.bpl注册。

时间:2011-10-19 13:49:54

标签: delphi packages delphi-xe design-time

Delphi中设计时包的一个可怕错误,这意味着在Palette上注册安装新组件的包是这个错误:

  

组件TSomething无法通过包something_design.bpl注册   因为它已经被包stuff_design.bpl注册了。?

我已经知道了很多:

  1. 如果您有两个BPL副本并且您加载了一个,但另一个依赖于BPL的包尝试加载另一个,并且它尝试加载第二个副本,则会出现此错误。

  2. 有时,隐式导入需要你修复隐式导入警告,清理所有工件(dcu,dcp等)然后重试,这有些奇怪的事情,这就消失了。

    < / LI>

    但是,如果以上情况正在解决问题,你如何解决问题呢?

    在我看来,我的硬盘驱动器上只有这个BPL的一个副本,并且路径指向它,并且不知何故,一个软件包正在对软件包执行“隐形”后台加载,在IDE之前看到它,然后IDE本身尝试加载一个包,该包已经使用Win32调用LoadLibrary加载到IDE的内存中,第二个加载是尝试加载此包的IDE,导致失败

    我正在寻找:

    一个。如何找出问题所在,以及如何解决问题。

    B中。避免这种情况的方法(用于扫描软件包或delphi IDE配置的防御性实践或工具。)

    ℃。解决方法。例如,我发现使用-np参数启动Delphi ide(bds.exe),然后在最初的IDE启动时加载我的项目,有时通过延迟项目/表单打开来解决问题,直到以后,当Delphi IDE看起来更稳定时。

2 个答案:

答案 0 :(得分:2)

首先,你在XE工作吗? 在我今年早些时候制作一个替换日历的组件后,我一直在努力解决这个问题。我仍然不确定是什么修复它。但我相信错误与路径有关。通过对2个路径定义可见,确保它不包含两次。

如果正在使用它,您应该能够看到包含的包。

希望你能理解这一点,我仍然想知道我当时做了什么。

答案 1 :(得分:0)

所有其他方面都是正确的(路径,副本数等)...当我的IDE包依赖于已安装到IDE中的其他(第三方)软件包时,我遇到此问题。 KEY是为了加载其他包,这样当你构建包时,它会识别正确的“Requires”并启动对话框,让你同意添加它。您可以通过在项目管理器中的包中添加一个空的新项目并将一些第三方控件放到表单上来加载其他包。现在,当您编译包时,它应该看到另一个包并将其包含在Requires列表中。

我想你可以将ForceDemandLoadState(dlDisable)添加到第三方软件包中,但是谁想要呢?