Delphi 使用RC.EXE或BRCC32.EXE生成*.RC文件时,Include文件的行为会有所不同

Delphi 使用RC.EXE或BRCC32.EXE生成*.RC文件时,Include文件的行为会有所不同,delphi,rc,Delphi,Rc,我希望在我的Delphi项目的RC文件中使用点(.)作为资源条目。但是,Delphi的BRCC32.exe不允许在资源命名中使用点(.)。从Delphi 2010开始,我们可以在中指定“要使用的资源编译器” 切换到支持点命名的RC.exe(Windows SDK资源编译器) 使用RC.exe作为资源编译器可以实现我想要的点命名。但是,我在使用rc文件中的#include时遇到了一个问题 我有一个app.db.excludes.rc文件如下: #include "../../../../core/

我希望在我的Delphi项目的RC文件中使用点(.)作为资源条目。但是,Delphi的BRCC32.exe不允许在资源命名中使用点(.)。从Delphi 2010开始,我们可以在中指定“要使用的资源编译器”

切换到支持点命名的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"
package resource.db;

{$R *.res}
{$R 'payroll.db.excludes.res'}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
....
和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工作吗?

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

而不是使用#include来嵌入RC文件:

#include "../../../../core/resource/db/excludes/system.db.excludes.rc"
我删除了#include的用法,并将“system.db.excludes.rc”添加到我的Delphi项目(.dproj)中

打补丁的“app.db.excludes.rc”是:

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

#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"
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.exeCGRC.exe/RC.exe

我想知道BRCC32是否有效。。。除非这是当前目录的问题(说到控制执行环境),否则您可能只需要设置
INCLUDE
环境变量以提及所需的目录,然后就不需要特殊的预构建操作了;默认执行
rc
将起作用。