【问题标题】:Package contains a component that doesn't belong to it.包包含不属于它的组件。
【发布时间】:2011-10-15 19:33:06
【问题描述】:

我正在创建一些组件,在安装并检查哪些组件已注册后,还有一些额外的组件不属于我创建的包的一部分。它们是我们在系统中使用的其他软件包的一部分。由于该软件同时使用了这两个包,这会引发关于同一组件被注册两次的错误。

是什么导致未在 contains 部分中列出的组件在包中注册?

德尔福 2007

【问题讨论】:

    标签: delphi components packages


    【解决方案1】:

    是什么导致未在包含部分中列出的组件 在包中注册?

    存在调用RegisterComponentsRegister 过程。

    两种可能:

    1. 您的包使用的单元通过标准Register 程序注册其组件。该单元不属于任何其他包,因此它与您的包一起注册。在这种情况下,您应该得到一个关于隐式使用的单位的warning

    2. 您的包直接或间接依赖于包含组件的包。该软件包尚未安装,因此它与您的软件包一起安装。当在 IDE 中加载一个包时,所有单元都被递归枚举并且每个找到的Register 过程都被 IDE 调用。通过安装一个包,您实际上也安装了它所依赖的所有设计包。

    【讨论】:

    • 足够接近,可以为我指明正确的方向。组件的注册方法与组件的运行时代码在同一单元中。它是已安装软件包的一部分,但该软件包未列在需要列表中。最后,我使用条件定义来防止该单元被编译到我的包中。
    • @JamesB:如果该组件是已安装软件包的一部分,那么它已经作为该软件包的一部分安装。
    • 它已经安装了,我认为这是我创建的包尝试注册相同组件时造成错误的原因
    • @JamesB 确切的错误消息有助于确定问题所在。
    • 我确实提到过:“由于软件使用了这两个软件包,这会引发关于同一组件被注册两次的错误。”但也许我应该说得更清楚。
    【解决方案2】:

    如果您的包依赖于其他包中已包含的组件,则该包必须列在您的包的需求列表中,因此它使用来自该其他包的组件。如果未列出其他包,则您的代码使用的单位将包含在您的包中。现在您在两个包装中拥有相同的单元。

    因此,找出您的代码所依赖的包组件或单元包含在哪些包中,然后将该包添加到包的要求部分。这样它们就不会包含在您的包中,而是从另一个包中使用。

    示例:您的单元是单元 A。它使用单元 B。单元 A 在您的包含列表中,但单元 B 不在。包 P 已经包含单元 B。如果您不将包 P 放在您的需求列表中,单元 B 也将包含在您的包中,即使它不在包含列表中,因为您的包(您的单元 A)需要它单位发挥作用。如果你的需求列表中包含包 P(项目管理器中的“引用”分支),将使用包 P 中的单元 B,并且没有重复。

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2021-08-09
      • 1970-01-01
      相关资源
      最近更新 更多