【问题标题】:Compile rc files encounter "expected exponent value" error编译rc文件遇到“expected exponent value”错误
【发布时间】:2011-08-20 22:34:55
【问题描述】:

我有一个 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 不将资源名称解释为指数值?

【问题讨论】:

    标签: delphi resources rc


    【解决方案1】:

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

    我使用 Microsoft 的 rc.exe 对此进行了测试。 Embarcadero 的 brcc32.exe 还是会报错:

    错误 resrc.rc 1 1: 需要资源名称或资源类型名称

    因此,如果您想使用它或 IDE 的内置资源编译器,则必须使用类似上述重命名的 GUID。

    【讨论】:

    • 使用 GUID 有什么坏处?这对我来说似乎并不无道理。您能否给出该建议的一些理由,因为我想我可能会遗漏一些东西。
    • @David:它只是一个字符串,但你看看会发生什么。可以肯定的是,我会继续使用通常的 _、A-Z、0-9 方案。
    • 我想我更喜欢使用更好的工具!
    • 我更喜欢使用 IDE 中的工具。将 .rc 文件添加到您的 Delphi 项目中,它将自动编译。为什么我应该使用属于另一个编译器的命令行工具呢?
    • @David:不知道这有多重要。我们谈论的是 ID 名称,而不是可接受的格式。在 Delphi 中,C、C# 等标识符也有其限制。
    【解决方案2】:

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

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

    【讨论】:

    • Delphi IDE 不直接支持微软资源编译器rc。我将继续使用 cgrc 或 brcc32。用双引号括起来 GUID 解决了我的问题,但似乎是多余的。我想我会继续使用纯 GUID 并避免生成那些有问题的 GUID。对于那些在其他地方使用的持久化 GUID,我会一一挖掘出来,并用新的 GUID 替换它。我认为这是某种我们无法控制的资源编译器错误。除非我们有 cgrc 或 brcc32 源代码来修正这个 bug。
    • 使用预构建操作,您可以使用任何您喜欢的工具。不需要被束缚。很抱歉,Rudy 和我无法为您提供任何帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多