Delphi 10.x "Cannot resolve unit name" 对于新安装的库

Delphi 10.x "Cannot resolve unit name" for newly installed library

我在安装第三方库时遇到了以下令人费解的情况,在本例中是Virtual Treeview,我将在此作为示例。

按照 INSTALL.txt 中的安装步骤后,新组件出现在 Delphi 的组件面板中,并且可以添加到表单中。

但是,构建所提供的示例项目之一,在本例中 "Minimal" 失败,表示:

'Cannot resolve unit name "VirtualTrees" at line xxx',这是列出 VirtualTrees 的 uses 语句。

与该症状一致,在源代码编辑器中,(使用)VirtualTrees 和附属组件声明标有红色波浪线,表示标识符未声明或未解析。

提供的演示项目设置为目标 Windows 32。但令人费解的是,如果我将目标切换为 Windows 64,它会编译。

安装包括:

  1. 将提供的 zip 文件解压缩到您找到源包的位置。

  2. 在Delphi中打开项目组:文件>打开....VirtualTreeView.groupproj

  3. 加载后,在项目树中,右键单击 VirtualTreesD26.bpl > 安装。

  4. 将 VirtualTreeView 的 "Source" 文件夹添加到库路径,使用 "Tools > Options > Language > Delphi Options > Library > Library Path > [...]"

是什么让 IDE 知道组件,但随后无法为 Windows 32 编译,但为 Windows 64 编译成功?

每个目标都有自己的库路径。您已将 VT 路径添加到 Win64 目标,但需要对 Win32 目标执行相同的操作。

或者,从 Win64 目标搜索路径中删除 VT 路径,并将它们添加到适用于所有项目的目标中,然后它们将被其他项目继承。

在选项对话框中有一个下拉控件,允许您指定应用设置的目标。

简短的回答是库路径设置不正确。感谢 David Heffernan 指出了这一点。

但是如何以及为什么?

我错过的关键部分是库设置对话框捕获适用于每个不同平台目标的不同路径集。因此,在“库设置”对话框的顶部有一个 "Selected Platform" 下拉菜单,用于控制下面的设置将应用于哪个平台。

为了能够构建 Win 32 VCL 应用程序,需要专门为 Windows 32 设置库路径,这意味着在执行该步骤之前将 Selected Platform 下拉列表设置为 Windows 32将路径添加到 Virtual TreeView 的源目录。

回想起来很明显,也许这个 SO post 将有助于将 "Cannot resolve unit name" 与这个潜在原因联系起来。

关于为什么会发生这种情况,有几个问题需要补充。

a) 来自旧版本 Delphi 的用户在处理多个平台之前可能熟悉此库设置对话框,因此没有意识到它现在具有 "Selected Platform" 功能。

b) 在我安装的 Delphi 10.3 中,这是一个全新的版本,每次打开“库设置”对话框时,"Selected Platform" 下拉菜单都会恢复为 Windows 64。它既不与当前打开的项目的平台协调,也不记得您上次将其设置为什么。因此很容易错过它没有设置为您假设的平台,除非您知道要明确查看。

虽然此功能设置了整个 Delphi 安装 ("globally") 的库路径,但在项目级别存在重叠设置,访问方式如下 (例如 "Minimal" 项目):

项目树,ProjectGroup1 > Minimal.exe > 构建配置 > 右键单击​​ >(项目选项对话框)构建 > Delphi 编译器 > 目标(所有配置或特定目标)> "Search path" 插槽。

Delphi 显然合并了 "Search path" 与工具 > ... > 库设置 > 库路径。

最后,对于 Virtual Treeview,其维护者 Joachim Marder 在安装说明中添加了一条注释,以避免此处描述的陷阱。