我希望在我的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工作?
答案 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 。