Как сгенерировать запись ресурса с идентификатором строкового типа?

У меня есть файл .rc со следующей записью:

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

Когда я компилирую этот файл .rc с помощью rc.exe, идентификатор записи ресурса становится 1111, 1113 и 1119 соответственно.

Судя по всему, компилятор ресурсов обработал идентификатор как числовой.

Мое первое впечатление заключалось в том, что .res файлы не могут хранить числа как строковые. Но при использовании редактора ресурсов (например: XNResourceEditor.exe для изменения идентификатора ресурса 1111 на 01111 и он сохраняется как 01111. Это показывает, что идентификатор ресурса может хранить числовой тип как строковый.

Есть ли способ скомпилировать числовой идентификатор ресурса как строковый?


person Chau Chee Yang    schedule 10.02.2015    source источник
comment
Можете ли вы показать вам весь сценарий ресурса. Здесь мы упускаем много контекста. Например, мы не знаем, что такое my_res. Разумеется, не показывайте весь сценарий, сначала сократите его.   -  person David Heffernan    schedule 10.02.2015
comment
@DavidHeffernan: Это моя урезанная версия rc файла. У меня есть только один вид ресурса.   -  person Chau Chee Yang    schedule 10.02.2015
comment
Он не компилируется, когда я использую brcc32. Я предполагаю, что это компилятор ресурсов, поскольку вопрос помечен как delphi. Если вы хотите использовать rc, значит тег delphi применен неправильно.   -  person David Heffernan    schedule 10.02.2015
comment
@DavidHeffernan: перейдите к Project | Options и измените компилятор ресурсов на Windows SDK Resource Compiler. Не используйте Borland Resource Compiler (brcc32.exe), он покажет ошибки.   -  person Chau Chee Yang    schedule 10.02.2015
comment
Я повторно пометил вопрос. Это не вопрос Delphi, это вопрос компилятора ресурсов MS RC.   -  person David Heffernan    schedule 10.02.2015
comment
@sashaolm Спасибо за добавление этого тега, rc.exe, но по этому тегу всего два вопроса. Этот тег следует удалить. Лучше использовать тег rc.   -  person David Heffernan    schedule 10.02.2015
comment
Ради интереса, вы пытались заключить идентификаторы в кавычки?   -  person Jonathan Potter    schedule 10.02.2015
comment
@JonathanPotter: Я пробовал одинарные кавычки ('), двойные кавычки ("), косую черту (/ и `\`), и ничего из этого не работает.   -  person Chau Chee Yang    schedule 10.02.2015
comment
@ChauCheeYang Вы должны избегать фразы, что ничего из этого не работает. Вы можете заключить ID в кавычки. Но кавычки появляются в тексте идентификатора при компиляции ресурса.   -  person David Heffernan    schedule 10.02.2015


Ответы (1)


Компилятор ресурсов RC не имеет синтаксиса, позволяющего избежать целочисленного идентификатора, чтобы он обрабатывался как текст.

В документации говорится:

Уникальное имя или 16-разрядное целое число без знака, идентифицирующее ресурс.

Компилятор ресурсов пытается интерпретировать идентификатор как целое число. Если это возможно, то идентификатор интерпретируется как целое число, в противном случае он интерпретируется как строка. Если целое число превышает границы 16-битного целого числа, используется его значение и 0xffff.

Это ограничение компилятора ресурсов. Формат ресурса поддерживает текстовые идентификаторы, содержащие только цифры. Если для вас крайне важно производить такие ресурсы, я думаю, вам потребуется:

  1. Найдите компилятор ресурсов, который позволяет экранировать числа как текст, или
  2. Напишите свой собственный базовый компилятор ресурсов для выполнения этой задачи.
person David Heffernan    schedule 10.02.2015
comment
Я думаю, что это лучший ответ на данный момент. Я не нашел другого решения с использованием имеющихся инструментов. - person Chau Chee Yang; 10.02.2015