Jam*_*amo 19 ide delphi packages custom-component
试图为一组TFrame-descendent组件重新安排我的包,我发现它似乎有必要将我的一些实用程序TFrame后代与使用它们的对话框形式分开,主要是因为前者在调色板中注册为true组件和IDE似乎有时会混淆IDE使用它们的对话框形式.反过来,对话框形式由非可视组件调用,这些组件是第三个包的一部分.这一点,到目前为止,似乎让大多数编译器的依赖性有关的投诉 /混乱走开.(但我还没出来).
当使用对话框窗体(调用框架)编译包时,我收到警告"单元'MyFrames'被隐式导入包'MyDialogForms'"
鉴于它显示为编译器警告,我很久以前就给人的印象是"隐式导入"一个单元通常不是一件好事.是否有特定情况并非如此?即隐含导入单位是否合适,和/或适当的做法?......如果是,那些具体案例是什么?
Mas*_*ler 30
这是问题所在:
您只能在程序中拥有一个单元的副本.如果您尝试通过软件包两次加载相同的单元,它将引发异常,并且第二次不会加载软件包.避免这种情况的方法是构建包,以便在多个包中不使用任何单元.
您编译的每个单元的代码都必须在包中.编译器将从您在contains部分中声明的所有单元开始,但这些单元使用的任何其他单元也必须编译,以便它可以访问,除非这些单元包含在另一个包中,列在requires下.这些额外内容是"隐式导入"单位.麻烦的是,它们是隐式导入的,未在包含部分中明确说明,它们将在项目管理器中方便地显示在右侧.这意味着您可能没有注意到您的设备在一个包中,并最终将其放入另一个包中.然后,当您尝试运行程序并加载程序包时,事情会中断.这就是编译器警告你的原因.
出于某种原因,这是一个警告,而不是错误.只要您了解系统的工作原理,使用隐式导入在技术上是安全的.请记住,无论您是否申报,这些单位都会在包裹中结束.但话又说回来,因为无论你是否声明它们,它们都会在那里结束,只是正式添加它们并为自己省去麻烦可能更简单.