我尝试在 2 个不同的命名空间中创建具有相同类名的 2 个表单
FirstNameSpace.ExampleFormName.TExampleFormName
SecondNameSpace.ExampleFormName.TExampleFormName
虽然可以编译,但我得到以下提示
[dcc32 提示] H2161 警告:重复资源:类型 10 (RCDATA),ID
示例格式名称;文件
保留 FirstNameSpace.ExampleFormName.TExampleFormName.DFM 资源;
文件 SecondNameSpace.ExampleFormName.TExampleFormName.dfm 资源
被丢弃。
并且在引用时程序崩溃TExampleFormName
.
看起来没有足够的信息让链接器正常工作。
有什么办法可以让这个工作吗?
否。正如错误的性质和内容所示,关联表单文件 (.dfm) 中的类名引用不是命名空间限定的,相应的资源 ID 也不是。
表单类名在应用程序内/跨应用程序必须是唯一的。
类似地,DFM 中引用的组件的类名(包括放置在表单上的控件)也必须是唯一的,因为它们也不是命名空间限定的。
为了促进/确保唯一的组件/控制类名,供应商和组件开发人员采用了前缀系统。也就是说,由供应商或组件套件等生成的每个类除了其常用名称之外还将共享一个公共前缀。
例如,如果一家名为 ACME 的公司要提供增强的标准 UI 控件库,他们可能会将其命名为:
TAcmeEdit
TAcmeButton
TAcmeListbox
etc
为了将它们与标准(无前缀)VCL 控件或其他供应商控件(使用不同的前缀)区分开来。
Delphi 前缀注册表 http://delphiprefix.href.com/是一个社区运行/支持的网站,维护这些前缀的列表(最常用于控件/组件库的开发人员,以确保他们选择尚未使用的前缀)。
我不确定 FMX 应用程序资源是如何处理的may在那种情况下是可能的。但只是因为我不知道doesn't工作并不意味着它does.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)