【发布时间】:2011-10-15 19:33:06
【问题描述】:
我正在创建一些组件,在安装并检查哪些组件已注册后,还有一些额外的组件不属于我创建的包的一部分。它们是我们在系统中使用的其他软件包的一部分。由于该软件同时使用了这两个包,这会引发关于同一组件被注册两次的错误。
是什么导致未在 contains 部分中列出的组件在包中注册?
德尔福 2007
【问题讨论】:
标签: delphi components packages
我正在创建一些组件,在安装并检查哪些组件已注册后,还有一些额外的组件不属于我创建的包的一部分。它们是我们在系统中使用的其他软件包的一部分。由于该软件同时使用了这两个包,这会引发关于同一组件被注册两次的错误。
是什么导致未在 contains 部分中列出的组件在包中注册?
德尔福 2007
【问题讨论】:
标签: delphi components packages
是什么导致未在包含部分中列出的组件 在包中注册?
存在调用RegisterComponents 的Register 过程。
两种可能:
您的包使用的单元通过标准Register 程序注册其组件。该单元不属于任何其他包,因此它与您的包一起注册。在这种情况下,您应该得到一个关于隐式使用的单位的warning。
您的包直接或间接依赖于包含组件的包。该软件包尚未安装,因此它与您的软件包一起安装。当在 IDE 中加载一个包时,所有单元都被递归枚举并且每个找到的Register 过程都被 IDE 调用。通过安装一个包,您实际上也安装了它所依赖的所有设计包。
【讨论】:
如果您的包依赖于其他包中已包含的组件,则该包必须列在您的包的需求列表中,因此它使用来自该其他包的组件。如果未列出其他包,则您的代码使用的单位将包含在您的包中。现在您在两个包装中拥有相同的单元。
因此,找出您的代码所依赖的包组件或单元包含在哪些包中,然后将该包添加到包的要求部分。这样它们就不会包含在您的包中,而是从另一个包中使用。
示例:您的单元是单元 A。它使用单元 B。单元 A 在您的包含列表中,但单元 B 不在。包 P 已经包含单元 B。如果您不将包 P 放在您的需求列表中,单元 B 也将包含在您的包中,即使它不在包含列表中,因为您的包(您的单元 A)需要它单位发挥作用。如果你的需求列表中包含包 P(项目管理器中的“引用”分支),将使用包 P 中的单元 B,并且没有重复。
【讨论】: