使用RC.EXE或BRCC32.EXE构建* .rc文件包含文件的行为不同

时间:2010-12-27 10:39:44

标签: delphi rc

我希望在我的Delphi项目的RC文件中使用点(。)作为资源条目。但是,Delphi的BRCC32.exe不允许在资源命名中使用点(。)。自Delphi 2010起,我们可以在

中指定“要使用的资源编译器”
Project | Option | Resource Compiler 

切换到在命名时支持点的RC.exe(Windows SDK资源编译器)。

使用RC.exe作为资源编译器适用于我想要的点命名。但是,我在rc文件中使用#include时遇到问题。

我有一个app.db.excludes.rc文件如下:

#include "../../../../core/resource/db/excludes/system.db.excludes.rc"

HR_BRANCH_DSC     8000  "HR.BRANCH.DSC.xml"
HR_CALENDAR_DSC   8000  "HR.CALENDAR.DSC.xml"
HR_CATEGORY_DSC   8000  "HR.CATEGORY.DSC.xml"

和system.db.excludes.rc文件:

#include "../../system.h"

SYSTEM_GROUPS_DSC   8000  "SYSTEM.GROUPS.DSC.xml"
SYSTEM_SCRIPT_DSC   8000  "SYSTEM.SCRIPT.DSC.xml"
SYSTEM_USER_DSC     8000  "SYSTEM.USER.DSC.xml"

编译Delphi项目产量:

[BRCC32 Error] payroll.db.excludes.rc(3): file not found: SYSTEM.GROUPS.DSC.xml
[BRCC32 Error] payroll.db.excludes.rc(4): file not found: SYSTEM.SCRIPT.DSC.xml
[BRCC32 Error] payroll.db.excludes.rc(5): file not found: SYSTEM.USER.DSC.xml

如果使用RC.exe,则会出现上述问题。如果我使用BRCC32.exe,它没有任何问题。

此问题是由于app.db.excludes.rc和system.db.excludes.rc未保存在同一文件夹中。

如果我将system.db.excludes.rc更改为

#include "../../system.h"

SYSTEM_GROUPS_DSC   8000  "../../../../core/resource/db/excludes/SYSTEM.GROUPS.DSC.xml"
SYSTEM_SCRIPT_DSC   8000  "../../../../core/resource/db/excludes/SYSTEM.SCRIPT.DSC.xml"
SYSTEM_USER_DSC     8000  "../../../../core/resource/db/excludes/SYSTEM.USER.DSC.xml"

然后RC.exe将成功编译。

有没有人有任何想法如何在解释上面的包含文件时使RC.exe作为BRCC32.EXE工作?

2 个答案:

答案 0 :(得分:3)

您可以尝试RC/I选项来指定XML文件所在的目录。您必须运行RC作为预构建操作,以便对其执行环境进行大量控制。

答案 1 :(得分:0)

而不是使用#include来嵌入一个rc文件:

#include "../../../../core/resource/db/excludes/system.db.excludes.rc"

我删除#include的用法并将“system.db.excludes.rc”添加到我的Delphi项目(.dproj)中。

修补后的“app.db.excludes.rc”是:

HR_BRANCH_DSC     8000  "HR.BRANCH.DSC.xml"
HR_CALENDAR_DSC   8000  "HR.CALENDAR.DSC.xml"
HR_CATEGORY_DSC   8000  "HR.CATEGORY.DSC.xml"

我的Delphi包文件(.dpk)如下:

package resource.db;

{$R *.res}
{$R 'payroll.db.excludes.res'}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
....

资源条目应手动添加到.dpk文件中:

{$R 'payroll.db.excludes.res'}

此方法适用于 BRCC32.exe CGRC.exe / RC.exe