【问题标题】:How to generate resource entry of string type ID?如何生成字符串类型ID的资源入口?
【发布时间】:2015-04-10 07:02:50
【问题描述】:

我有一个包含以下条目的 .rc 文件:

01111 my_res { "string 1" }
01113 my_res { "string 2" }
01119 my_res { "string 3" }

当我用 rc.exe 编译这个 .rc 文件时,资源条目 id 分别变为 111111131119

显然,资源编译器将 ID 视为数字。

我的第一印象是.res 文件不能将数字存储为字符串类型。但是当使用资源编辑器(例如:XNResourceEditor.exe将资源ID 1111更改为01111并存储为01111时。这表明资源ID可以存储数字为字符串类型。

有没有办法将数字资源 id 编译为字符串类型?

【问题讨论】:

  • 你能给你看一个完整的资源脚本吗?我们在这里遗漏了很多上下文。例如,我们不知道my_res 是什么。显然不要显示你的整个脚本,先把它剪下来。
  • @DavidHeffernan:那是我的 rc 文件的精简版。我只有一种资源。
  • 使用 brcc32 时无法编译。我假设资源编译器,因为问题被标记为 delphi。如果你的意思是使用rc,那么delphi标签被错误地应用了。
  • @DavidHeffernan:转到Project | Options 并将资源编译器更改为Windows SDK Resource Compiler。不要使用Borland Resource Compiler (brcc32.exe),它会显示错误。
  • 我重新标记了这个问题。不是Delphi的问题,是MS资源编译器RC的问题。

标签: windows winapi embedded-resource rc


【解决方案1】:

资源编译器 RC 没有任何语法允许您转义整数 ID,以便将其视为文本。

文档说:

标识资源的唯一名称或 16 位无符号整数。

资源编译器尝试将 ID 解释为整数。如果它可以这样做,则 ID 被解释为整数,否则它被解释为字符串。如果整数超出 16 位整数的范围,则使用其值和0xffff

这是资源编译器的限制。资源格式支持仅包含数字的文本 ID。如果制作此类资源对您至关重要,那么我认为您需要:

  1. 找到一个允许将数字转义为文本的资源编译器,或者
  2. 编写您自己的基本资源编译器来执行任务。

【讨论】:

  • 我认为这是迄今为止最好的答案。通过使用当前可用的工具,我没有找到其他解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2015-08-28
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多