通过.RC文件而不是.RES文件在项目中包含资源文件

luk*_*eck 16 delphi build-process embedded-resource

我记得在几年前读过一篇文章或帖子,建议在项目中包含一个资源文件,方法是引用.rc文件而不是已编译的.res文件,以便资源构建为项目构建过程的一部分.

我有一个glyphs.rc文件,我目前使用命令brcc32 glyphs.rc编译.在我的项目文件中,我有声明{$ R Glyphs.res}.

我想通过改变它来简化它

{$R Glyphs.rc} 
Run Code Online (Sandbox Code Playgroud)

但我不确定语法.当我尝试使用时,{$R Glyphs.rc}我得到一个错误`

[DCC Error] E2161 Error: RLINK32: Unsupported 16bit resource in file "Glyphs.rc". 
Run Code Online (Sandbox Code Playgroud)

这种方法可以用Delphi 2007吗?

Uli*_*rdt 23

只需通过"项目>添加到项目"菜单项将rc文件添加到项目中.这将创建TOndrej链接到{$R 'myres.res' 'myres.rc'}的帖子中的行.


Del*_*ics 6

链接器只能处理RES文件,但你可以直接编译调用资源编译器和编译的RC脚本来产生一个资源文件和链接,使用的变化$ R/$ RESOURCE指令.

在您的情况下(Delphi 2007),您只需要更改:

 {$r glyphs.res}
Run Code Online (Sandbox Code Playgroud)

 {$r glyphs.res glyphs.rc}
Run Code Online (Sandbox Code Playgroud)

如果这不能单独工作,请尝试将RC添加到项目中.在不同版本的Delphi中,您可能需要围绕文件名使用单引号:

 {$r 'glyphs.res' 'glyphs.rc'}
Run Code Online (Sandbox Code Playgroud)

注意:仍然需要识别res文件,不同之处在于能够另外识别要编译的rc文件,以便首先生成所需的res文件.

对此的支持似乎需要进行一些修补,在最近的版本中,将RC添加到项目中似乎并不总是被项目"检测",直到您保存,关闭并重新打开项目为止(例如,我在XE4中发现了这种情况,但也可能适用于其他版本).

同样在一些更新的版本中,只需将这样的$R 'file.res' 'file.rc'声明添加到DPR,项目管理器就会将引用的RC文件标识为项目的一部分,但在旧版本中似乎并非如此.再次,似乎在这个领域的修修补补的一部分.

我还注意到XE4在稳定性方面通常非常稳固,但是在关闭IDE时添加/删除RC文件似乎会触发访问冲突,但重新打开IDE和项目时似乎恢复了正常的稳定性.即添加/删除似乎导致问题的RC文件,而不仅仅是在项目中使用RC文件的事实.

更新:在最新版本的Delphi(Delphi 10.2 Berlin)中,您应该{$R *.res}在行之前包含自定义资源,否则它们将不会自动编译.