我正在创建一些组件,在安装和检查哪些组件已经注册后,还有一些额外的组件不属于我创建的软件包。它们是我们在系统中使用的其他包的一部分。由于软件使用两个软件包,因此会引起有关同一组件注册两次的错误。
是什么导致 contains
部分中未列出的组件在包中注册?
Delphi 2007
答案 0 :(得分:2)
导致未在“包含”部分中列出的组件的原因是什么 在包中注册?
调用Register
的RegisterComponents程序的存在。
两种可能性:
您的软件包使用的是一个按标准Register
程序注册其组件的单元。此单元不属于任何其他包装,因此它与您的包装一起注册。在这种情况下,您应该获得有关隐式使用单位的warning。
您的包直接或间接取决于包含组件的包。此软件包尚未安装,因此它将与您的软件包一起安装。在IDE中加载包时,将递归枚举所有单元,并且IDE会调用每个找到的Register
过程。通过安装软件包,您还可以有效地安装它所依赖的所有设计软件包。
答案 1 :(得分:0)
如果您的软件包依赖于已包含在另一个软件包中的组件,则该软件包必须列在软件包的require列表中,因此它使用该软件包中的组件。如果未列出其他包,则代码使用的单位将包含在您的包中。现在你有两个包中的相同单位。
因此,请找出您的代码所依赖的软件包组件或单元,并将该软件包添加到软件包的requires部分。这样他们就不会包含在你的包中,而是从其他包中使用。
示例:您的单位是单位A.它使用单位B.单位A在您的包含列表中,但单位B不在。包装P已经包含单元B.如果您没有将包装P放入您的需求清单,单元B也将包含在您的包装中,即使它不在包含清单中,因为您的包装(您的单元A)需要单位功能。如果在需求清单中包含包P(项目经理中的“参考”分支),将使用包P中的单元B,并且没有重复。