我尝试在2个不同的命名空间中创建2个具有相同类名的表单
FirstNameSpace.ExampleFormName.TExampleFormName
SecondNameSpace.ExampleFormName.TExampleFormName
虽然这个编译,我得到以下提示
[dcc32提示] H2161警告:资源重复:输入10(RCDATA),ID TEXAMPLEFORMNAME;文件 保留FirstNameSpace.ExampleFormName.TExampleFormName.DFM资源; file SecondNameSpace.ExampleFormName.TExampleFormName.dfm资源 丢弃。
,引用TExampleFormName
时程序崩溃。
看起来没有足够的信息让链接器正常工作。
有没有办法让这项工作?
答案 0 :(得分:2)
没有。正如错误的性质和内容所示,关联表单文件(.dfm)中的类名引用不是命名空间限定的,也不是相应的资源ID。
表单类名在应用程序内/跨应用程序必须是唯一的。
类似地,DFM中引用的组件的类名(包括放在表单上的控件)也必须是唯一的,因为它们也不是命名空间限定的。
为了促进/确保独特的组件/控制类名,供应商和组件开发人员采用了前缀系统。也就是说,由供应商或一组组件等生成的每个类除了通常的名称外还将共享一个共同的前缀。
例如,如果一家名为ACME的公司提供增强的标准UI控件库,他们可能会将其命名为:
TAcmeEdit
TAcmeButton
TAcmeListbox
etc
为了区别于标准(非前缀)VCL控件或其他供应商控件(使用不同的前缀)。
The Delphi Prefix Registry是一个社区运行/支持的网站维护这些前缀的列表(大多数用于控件/组件库的开发人员,以确保他们选择一个尚未使用的前缀)。
我不确定如何处理FMX应用程序资源,在这种情况下可能。但仅仅因为我不知道不工作并不意味着 。