为什么 Delphi (dcc32.exe)有一个设置“名称空间搜索路径”的选项?

kx5bkwkv  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(180)

Delphi 2007及更高版本中的编译器(dcc32.exe)有一个选项

-NS<namespaces> = Namespace search path

这是否与项目选项对话框中的编译器选项“默认命名空间”和“命名空间前缀”有关?搜索“路径”听起来像文件夹(目录)名,所以我不确定该选项的用途。

hk8txs48

hk8txs481#

此设置的目的是提供一个前缀列表,用于搜索未完全限定的单元名称。例如,在旧的 Delphi 版本中,通常在单元的interface部分中包含如下内容:

uses
  Windows, SysUtils, Classes;

这将指示编译器在尝试定位未知标识符时使用WindowsSysUtilsClasses单元。
在更现代的 Delphi 中,它的工作方式大致相同,只是单位不再称为WindowsSysUtils,而是WinApi.WindowsSystem.SysUtils。如果你只使用WindowsSysUtils,它们将不会被找到。
但是,当然,没有人想用新的单元名重写所有的源代码。 Delphi 编译器提供了一个选项,如果没有找到确切的单元名,可以默认指定要搜索的名称空间。在上面的例子中,我们可以将默认名称空间设置为WinApi;System,然后所有的单元都会被正确地找到。因为 Delphi 编译器会尝试搜索Windows(未找到),WinApi.Windows(已找到-转至下一个设备)、SysUtils(未找到)、WinApi.SysUtils(未找到)、System.SysUtils(已找到-转至下一个设备)、...、System.Classes(已找到-已找到所有所需设备)。
如果使用GUI,通常不会处理这个问题,因为名称空间列表是项目文件的一部分,并且提供了一个合理的默认值。如果使用msbuild.exe和项目文件从命令行构建应用程序,这同样适用。但如果使用dcc*.exe*.dpr,那么你必须提供你想要自动应用的名称空间--这就是-NS选项的作用。在我们的例子中,你可以使用-NSWinApi;System

相关问题