VCL项目是否有2个具有相同类名但名称空间不同的表单?

时间:2017-11-24 02:38:30

标签: delphi delphi-10-seattle

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

FirstNameSpace.ExampleFormName.TExampleFormName
SecondNameSpace.ExampleFormName.TExampleFormName

虽然这个编译,我得到以下提示

  

[dcc32提示] H2161警告:资源重复:输入10(RCDATA),ID   TEXAMPLEFORMNAME;文件   保留FirstNameSpace.ExampleFormName.TExampleFormName.DFM资源;   file SecondNameSpace.ExampleFormName.TExampleFormName.dfm资源   丢弃。

,引用TExampleFormName时程序崩溃。

看起来没有足够的信息让链接器正常工作。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:2)

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

表单类名在应用程序内/跨应用程序必须是唯一的。

类似地,DFM中引用的组件的类名(包括放在表单上的控件)也必须是唯一的,因为它们也不是命名空间限定的。

为了促进/确保独特的组件/控制类名,供应商和组件开发人员采用了前缀系统。也就是说,由供应商或一组组件等生成的每个类除了通常的名称外还将共享一个共同的前缀。

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

TAcmeEdit
TAcmeButton
TAcmeListbox
etc

为了区别于标准(非前缀)VCL控件或其他供应商控件(使用不同的前缀)。

The Delphi Prefix Registry是一个社区运行/支持的网站维护这些前缀的列表(大多数用于控件/组件库的开发人员,以确保他们选择一个尚未使用的前缀)。

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