编译rc文件会遇到“预期指数值”错误

时间:2011-08-20 03:50:26

标签: delphi resources rc

我有一个rc条目:

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

当我使用cgrc.exe或brcc32.exe编译rc文件时,遇到此错误:

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

这是由于资源名称“CC6C210B-2EAC”被解释为指数值(-2EA)。 -2E之后的A字符不是有效的指数值。

如果我将rc条目更改为

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

资源编译没有任何错误。

不幸的是,我不能简单地更改资源名称,因为它已被广泛使用。有没有办法让rc不将资源名称解释为指数值?

2 个答案:

答案 0 :(得分:0)

我不太确定使用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;

我会将其他常规的实施留给你的想象力。 ; - )


更新

如果您将ID放在引号中,则应使用rc.exe进行编译。如果没有引号,资源编译器会将其视为预处理程序指令并且非常混淆:

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

我用微软的rc.exe测试了这个。 Embarcadero的brcc32.exe仍然会出错:

  

错误resrc.rc 1 1:期望资源名称或资源类型名称

因此,如果您想使用它,或者IDE的内置资源编译器,您将必须使用类似于重命名的GUID之类的内容。

答案 1 :(得分:0)

我建议您使用Microsoft资源编译器rc。根据rc的文档,资源定义的第一个标记应该是名称或16位整数。为什么brcc32想要把它解释为一个真正的价值是超出我的。

如果这不起作用,请尝试将GUID括在引号中,而不是'。