H2161 重复资源 [一个 VCL 项目可以有 2 个具有相同 class 名称但不同命名空间的表单吗?]

H2161 Duplicate resource [Can a VCL project have 2 forms with the same class name but different namespaces?]

我尝试在 2 个不同的命名空间中创建 2 个具有相同 class 名称的表单

FirstNameSpace.ExampleFormName.TExampleFormName
SecondNameSpace.ExampleFormName.TExampleFormName

虽然编译成功,但我得到以下提示

[dcc32 Hint] H2161 Warning: Duplicate resource: Type 10 (RCDATA), ID TEXAMPLEFORMNAME; File FirstNameSpace.ExampleFormName.TExampleFormName.DFM resource kept; file SecondNameSpace.ExampleFormName.TExampleFormName.dfm resource discarded.

并且程序在引用 TExampleFormName 时崩溃。

似乎没有足够的信息让链接器正常工作。

有什么方法可以实现吗?

没有。如错误的性质和内容所示,关联表单文件 (.dfm) 中的 class-name 引用不是命名空间限定的,相应的资源 ID 也不是。

表单 class-名称必须是唯一的 within/across 一个应用程序。

同样,class DFM 中引用的组件名称(包括放置在窗体上的控件)也必须是唯一的,因为它们也不是命名空间限定的。

对于promote/ensure 独特的component/control class 名称,供应商和组件开发人员采用了前缀系统。也就是说,供应商或一套组件等生产的每个 class 除了它们通常的名称外,还将共享一个公共前缀。

例如,如果一家名为 ACME 的公司要提供一个增强的标准 UI 控件库,他们可能会将它们命名为:

TAcmeEdit
TAcmeButton
TAcmeListbox
etc

为了将它们与标准(无前缀)VCL 控件或其他供应商控件(使用不同的前缀)区分开来。

The Delphi Prefix Registry 是一个社区 run/supported 网站维护这些前缀的列表(大多数用于 control/component 库的开发人员以确保他们选择一个尚未在使用).

我不确定 FMX 应用程序资源是如何处理的,在那种情况下可能是可能的。但仅仅因为我不知道它 工作并不意味着它 工作 .