3

我希望在我的 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 一样工作?

4

2 回答 2

3

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

于 2010-12-27T11:13:47.750 回答
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.exeCGRC.exe / RC.exe

于 2010-12-28T03:16:26.463 回答