2

我在安装一个第三方库的时候遇到了下面这个令人费解的情况,在这个例子中是Virtual Treeview,在这里我将作为一个例子。

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

但是,构建提供的示例项目之一,在这种情况下“最小”失败,说:

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

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

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

安装包括:

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

  2. 在 Delphi 中,打开项目组:File > Open .... VirtualTreeView.groupproj

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

  4. 使用“工具 > 选项 > 语言 > Delphi 选项 > 库 > 库路径 > [...]”将 VirtualTreeView 的“源”文件夹添加到库路径

是什么让 IDE 了解该组件,但随后无法为 Windows 32 编译,而为 Windows 64 编译成功?

4

2 回答 2

3

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

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

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

于 2019-04-18T08:48:48.817 回答
1

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

但是如何以及为什么?

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

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

回想起来很明显,也许这篇 SO 帖子将有助于将“无法解析单位名称”与这个潜在原因联系起来。

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

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

b) 在我安装全新的 Delphi 10.3 时,每次打开 Library Settings 对话框时,“Selected Platform”下拉菜单都会恢复为 Windows 64。它似乎既不与当前打开的项目的平台协调,也不记得你上次设置它的位置。所以很容易错过它没有设置为您假设的平台,除非您知道要明确查看。

知道虽然此功能为整个 Delphi 安装(“全局”)设置库路径,但项目级别存在重叠设置,访问方式如下(例如“最小”项目),这可能也很有用:

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

Delphi 显然将“搜索路径”与工具 > ... > 库设置 > 库路径合并。

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

于 2019-04-21T23:34:09.410 回答