编译.rc文件内联

时间:2015-09-15 14:20:04

标签: delphi delphi-xe4

我正在使用Delphi XE4,并尝试实现32/64位兼容性,为此,我需要在资源上存储2个DLL(一个32另一个64),导出它们,如果可执行文件检测到64个位OS,它将使用64位DLL。但是我想要包含这个资源,只有在编译32位版本的可执行文件时才这样做,所以我试图得到这样的东西:

{$IFDEF WIN32}
{$R Resources.res Resources.rc}
{$ENDIF}

我不知道它是否正确,因为我无法测试,这条线: {$ R Resources.res Resources.rc}并不像我预期的那样工作。

如果我删除了Resources.res文件,则会给出错误

[dcc32错误] E1026找不到档案:' Resources.res'

如果我留下预编译的.res文件,它在构建/编译时不会刷新,即使我更改了.rc文件(例如删除其中一个DLL),exe仍然会得到相同的大小,所以我相信它没有刷新.res文件......

我的.rc文件是:

X86RES RCDATA x86.dll
X64RES RCDATA x64.dll

如何在编译为32位环境时,将此rc文件编译成资源?

1 个答案:

答案 0 :(得分:0)

  • 创建两个.rc文件。一个用于32位DLL,另一个用于64位DLL。
  • 将两个资源文件编译为.res文件。
  • 对于32位版本,只链接包含32位DLL的.res文件。
  • 对于64位版本,请链接两个.res文件。

我个人并不喜欢让IDE /编译器编译我的资源。我喜欢在预构建脚本中执行此操作。但那只是个人品味。

值得指出的是,IDE /编译器在编译项目时不会重新编译资源脚本。只有在进行构建或删除已编译的.res文件时,才会重新编译资源脚本。

这是我喜欢负责编译资源的原因之一。另一个是我选择使用的资源编译器,这在Embarcadero资源编译器不足的情况下很重要。

根据评论判断,您有一个我在上面描述的更复杂的场景。但是,基础知识保持不变。通过在资源文件和可执行模块之间建立一对一关联,您可以获得灵活性。这种灵活性允许您准确地链接您希望的模块,而不再是。