我有一个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不将资源名称解释为指数值?
答案 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括在引号中,而不是'。