【问题标题】:Using string-type resource identifiers in Windows .rc files / dlls在 Windows .rc 文件/dll 中使用字符串类型的资源标识符
【发布时间】:2011-11-18 14:50:08
【问题描述】:

我们的代码库中有许多 MFC 扩展 dll,其中许多都嵌入了在项目 .rc 文件中定义的 Windows 资源(IDS_...、IDD_...、IDB_...等)。我们使用数字标识符来定义我们的资源,特别注意我们的资源 ID 不会在 dll 之间发生冲突,这需要进行一些管理以确保我们的开发人员不使用相同的编号。

我意识到字符串类型的资源标识符可能是一种简单的方法,这意味着我们可以为每个不同的 dll 中的每个资源定义唯一的标识符。

我的问题是,这样做是否有任何技术问题,例如:

  • MFC dll / 资源链是否仍能正常工作?
  • Visual Studio 资源编辑器还能工作吗?

我在 MS 技术说明中没有发现任何内容表明这将是一个问题 - 我只是想知道人们是否有过这方面的经验。

【问题讨论】:

  • 我在写这个问题时忘记了一件事 - 对话框资源 id 值 (IDD_...) 必须是整数标识符,以确保使用 HH_HELP_CONTEXT 命令的 HtmlHelp(...) API 正常运行(见msdn.microsoft.com/en-us/library/ms670088(v=VS.85).aspx
  • 您在这个问题上有什么经验可以分享吗?我们现在正在处理同样的问题。

标签: windows winapi dll mfc


【解决方案1】:

但请注意,字符串表 (IDS_) 中的字符串 ID 必须是数字(16 位 IIRC)。字符串和另一个资源之间的差异是由于字符串不是单独的资源。实际上,字符串表由一组资源组成,每个资源最多包含 16 个具有连续 ID 的字符串。

对话框中的控件 ID 也是如此。但你很可能知道这一点。

在资源编辑器中,您可以在属性网格中指定字符串资源 id,只需在资源名称周围加上引号。

关于对话框和资源编辑器:你会有一个小问题:每当你为对话框创建一个类时,生成的代码都会包含 enum { IDD = resourceid }。不用说它不适用于字符串 id。但是您可以轻松摆脱这个 IDD 枚举并用字符串替换它。

【讨论】:

  • 感谢 cmets,特别是关于字符串表资源的内容。
猜你喜欢
  • 2011-09-25
  • 2013-03-12
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2012-03-16
  • 2011-04-07
相关资源
最近更新 更多