Delphi 包在没有找到引用类型的单元文件的情况下编译?

Delphi package compiles without the finding the unit file of a referenced type?

今天我想弄清楚为什么我认为应该破坏的东西会起作用。

我没有什么 Delphi 经验,我继承了一个 Delphi 代码库,并且正在设置一台机器,用于维护和编译它。我有一个编译成功的包,但无法弄清楚它是如何解析其中一种类型的。我的理解是,当你使用一个单位时,你必须

  1. 直接在你的包中包含源文件
  2. 在您的项目搜索路径上解析源 pas 或 dcu 文件
  3. 解析你的IDE库路径
  4. 上的源pas或dcu文件

None 这些似乎正在发生,但包编译。否则如何编译成功?

详情

我有 'base' 包直接包含在文件 THotLog.pas 中。该文件出现在项目管理器中项目的 Contains 文件夹下。 THotLog 不是包中的组件之一,它不在基础包的注册过程中。

然后我有 'consuming' 个需要基础包的包。消费包有几个带有 THotLog 成员的组件,消费包编译。这让我感到惊讶,因为我认为消费包必须能够找到 THotLog.pas 或 THotLog.dcu.

这是针对 RAD Studio 10.1 的。项目搜索路径(项目 > 选项:搜索路径)为空,IDE 搜索路径(工具 > 选项,然后是环境选项 > Delphi 选项 > 库)不包括 THotLog 所在的位置。

我也试过重命名硬盘上的所有 THotLog 文件并且消费包仍然可以编译。

假设我对类型解析的理解是错误的,我尝试制作一组​​具有类似布局的示例项目,并且示例使用包无法在不定位 pas 或 dcu 文件的情况下解析示例 THotLog。

构建 Delphi 包时,compiler/linker 会创建一个名为 [package-name].dcp 编译包文件 。它是一个二进制文件,包含该包中包含的所有已编译单元。

编译“基础”包创建了一个“消费”包可见的 [base-package].dcp 文件。 “consuming”包在其“Requires”部分引用了 base-package;这是基本包的 DCP 文件的 link。

Delphi Compiled Package File