【问题标题】:How to deal with "Illegal macro definition in command line or defines page" error?如何处理“命令行中的非法宏定义或定义页面”错误?
【发布时间】:2015-10-01 15:17:30
【问题描述】:

我正在尝试将某个文本文件作为资源嵌入到我的 EXE 中,但我玩得很开心。

我制作了一个简单的单行 .rc 文件并将其添加到项目中,但 BRCC32 因一个完全无用的错误而窒息:

[BRCC32 Error] MyRes.rc(1): Fatal error Illegal macro definition in command line or defined page.

这是文件的全部内容:

DATA_BASIC_ORDER     RCDATA Data\Data_BasicOrder.txt

仅当我在 IDE 中构建时才会发生这种情况。我能够在命令行上成功地构建一个 .RES 文件,并在十六进制编辑器中打开它会显示资源名称和文本文件的内容,但如果我用 {$R} 指令链接它,资源不会出现在 EXE 中。我用 ResHacker 验证了它;资源不存在。所以发生了一些非常奇怪的事情。

我已尝试关闭并重新启动 IDE。不用找了。我还在十六进制编辑器中打开了.rc 文件,以确保没有奇怪的字符搞砸了,但不,这是一个纯 ANSI 文本文件。

有谁知道这是怎么回事以及如何解决它?

编辑:它变得越来越奇怪。如果我将文件行完全留空,我仍然会收到同样的错误。但是,如果我从项目中删除该文件(从项目资源管理器中的列表中删除它),该错误消息就会消失,但它仍然没有出现在构建中。

【问题讨论】:

  • 我们如何重现这个?没有复制,这将是棘手的。
  • @DavidHeffernan:是的,不幸的是,这是一个工作项目,所以至少可以说分享一个复制案例也很棘手。我希望这里有人以前看过这个错误消息并且知道如何处理它。谷歌搜索后,我看到一些人询问这个错误,没有人得到任何有用的答案,所以我在这里有点走投无路。我想,“帮帮我,Obi-Wan Stackovi,你是我唯一的希望!”
  • 我从来没有过多地使用 RC 文件,也没有读过太多关于它们的信息。我唯一注意到的是,当使用 ANSI 以外的文件格式时,它们往往会出现这种错误。
  • @KenBourassa:感谢您的来信。这是我已经检查过的一件事,不幸的是,在十六进制编辑器中打开它以确保它是 ANSI。
  • 我可以确认这个问题。永远不会创建 .res 文件。如果您在指定 .res 和 rc 文件的行中保留该行,则即使您先从命令行编译该资源,也不会链接该资源。如果从命令行编译,然后使用{$R MyResource.res}构建,则资源添加正确。

标签: delphi delphi-xe


【解决方案1】:

反斜杠看起来很可疑。尝试引用它:

RCDATA Data\\Data_BasicOrder.txt

【讨论】:

  • 不,同样的错误。就像我说的,这确实可以从命令行编译器正确编译。 (但是资源没有链接,所以......是的。)
【解决方案2】:

如错误消息所示,您的问题的答案可能在编译器调用 BRCC32.exe 工具的命令行中可见。

我尝试在编译器配置中添加一些额外的“条件定义”时遇到了这个错误。我怀疑传递给 brcc32 的条件定义所允许的数量和长度(和/或下划线的数量)也有限制(显然是使用-d 参数)

【讨论】:

    【解决方案3】:

    我收到了相同的错误消息,并且它一直指向 MyResource.rc,即使问题出在条件定义之一中。不知何故,两个不同的定义最终出现在同一行,用逗号分隔。 PHNOCODE,DECODE 更正定义后,我的项目可以正确构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2021-12-29
      • 2022-01-01
      相关资源
      最近更新 更多