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

发布于 2025-01-14 22:13:19 字数 506 浏览 0 评论 0原文

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

FirstNameSpace.ExampleFormName.TExampleFormName
SecondNameSpace.ExampleFormName.TExampleFormName

尽管可以编译,但我得到以下提示

[dcc32 提示] H2161 警告:重复资源:类型 10 (RCDATA),ID 示例格式名称;文件 保留 FirstNameSpace.ExampleFormName.TExampleFormName.DFM 资源; 文件 SecondNameSpace.ExampleFormName.TExampleFormName.dfm 资源 被丢弃。

引用 TExampleFormName 时程序崩溃。

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

有什么办法可以让这个工作吗?

I tried creating 2 forms with the same class name in 2 different namespaces

FirstNameSpace.ExampleFormName.TExampleFormName
SecondNameSpace.ExampleFormName.TExampleFormName

although this compiles, I get the following hint

[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.

and the program crashes when referencing TExampleFormName.

It looks like there isn't enough information for the linker to work correctly.

Is there any way to make this work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梨涡 2025-01-21 22:13:19

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

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

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

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

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

TAcmeEdit
TAcmeButton
TAcmeListbox
etc

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

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

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

No. As is indicated in the nature and content of the error, the class-name reference in the associated form files (.dfm) is not namespace qualified and neither are the corresponding resource ID's.

Form class-names must be unique within/across an application.

Similarly, class names of components referenced in a DFM (including controls placed on the form) must also be unique since these also are not namespace qualified.

To promote/ensure unique component/control classnames, a system of prefixes has been adopted by vendors and component developers. That is, Every class produced by a vendor or in a suite of components etc will share a common prefix in addition to their usual name.

For example, if a company called ACME were to provide a library of enhanced, standard UI controls, they might name them:

TAcmeEdit
TAcmeButton
TAcmeListbox
etc

In order to distinguish them from the standard (non-prefixed) VCL controls or from other vendor controls (using a different prefix).

The Delphi Prefix Registry is a community run/supported web site maintains a list of these prefixes (of most use to developers of control/component libraries to ensure they pick a prefix that is not already in use).

I'm not sure how FMX application resources are handled and it may be possible in that case. But just because I don't know that it doesn't work doesn't mean that it does.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文