При компиляции rc-файлов возникает ошибка «ожидаемое значение показателя» - PullRequest
4 голосов
/ 20 августа 2011

У меня есть запись rc:

{CC6C210B-2EAC-4F6C-89E7-0D2FEFFCE278}  8000  "MyFile.txt"

Когда я компилирую файл rc с помощью cgrc.exe или brcc32.exe, я сталкиваюсь с этой ошибкой:

[BRCC32 Error] system.core.rc(1): expected exponent value, not 'a'

Это связано счтобы имя ресурса "CC6C210B-2EAC" было интерпретировано как значение показателя степени (-2EA).Символ A после -2E является недопустимым значением показателя степени.

Если я изменю запись rc на что-то вроде

{CC6C210B-2E2C-4F6C-89E7-0D2FEFFCE278}  8000  "MyFile.txt"

Ресурс скомпилируется без ошибок.

К сожалениюЯ не могу просто изменить имя ресурса, так как он широко используется.Есть ли способы заставить rc не интерпретировать имя ресурса как значение показателя степени?

Ответы [ 2 ]

0 голосов
/ 20 августа 2011

Я рекомендую вам использовать компилятор ресурсов Microsoft rc.Согласно документации для rc, первым токеном определения ресурса должно быть имя или 16-битное целое число.Почему brcc32 хочет интерпретировать это как реальное значение, мне совершенно непонятно.

Если это не сработает, попробуйте заключить GUID в кавычки "вместо".

0 голосов
/ 20 августа 2011

Я не уверен, что было бы неплохо использовать GUID в качестве имени ресурса.Если вы действительно хотите это сделать, вы можете захотеть «закодировать» его как «нормальный» идентификатор, например,

_CC6C210B_2EAC_4F6C_89E7_0D2FEFFCE278  8000  "MyFile.txt"

Вы просто пишете набор простых подпрограмм для «кодирования» и «декодирования», таких какзначение между обычной строкой GUID и «закодированной» формой.

function DecodeToGUID(const renamedGUID: string): string;
begin
  Result := '{' + Copy(ReplaceString(renamedGUID, '_', '-', [rfReplaceAll]), 2, MaxInt)) + '}';
end;

Я оставлю реализацию другой подпрограммы на ваше воображение.; -)


Обновление

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

"{CC6C210B-2EAC-4F6C-89E7-0D2FEFFCE278}"  8000  "MyFile.txt"

Я проверил это с помощью Microsoft rc.exe.Brcc32.exe Embarcadero по-прежнему выдаст ошибку:

Ошибка resrc.rc 1 1: Ожидается имя ресурса или имя типа ресурса

Так что если вы хотите использовать это,или встроенный компилятор ресурсов IDE, вам придется использовать что-то вроде переименованных идентификаторов GUID, как описано выше.

...