Включаемый файл ведет себя по-разному, используя RC.EXE или BRCC32.EXE для создания файлов * .rc - PullRequest
3 голосов
/ 27 декабря 2010

Я хочу использовать точку (.) В качестве записи ресурса в файлах RC для моего проекта Delphi. Тем не менее, Delphi BRCC32.exe не допускает точку (.) В именовании ресурсов. Начиная с Delphi 2010, мы можем указать «Resource Compiler to use» в

Project | Option | Resource Compiler 

для переключения на RC.exe (компилятор ресурсов Windows SDK), который поддерживает точку в именовании.

Использование RC.exe в качестве компилятора ресурсов работает для именования точек. Однако я столкнулся с проблемой использования #include в файле rc.

У меня есть файл 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.exclude.rc и system.db.exclude.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 ]

3 голосов
/ 27 декабря 2010

Вы можете попробовать опцию /I RC , чтобы указать каталог, в котором живут ваши XML-файлы. Вам нужно было запустить RC как действие перед сборкой, чтобы получить настолько полный контроль над его средой исполнения.

0 голосов
/ 28 декабря 2010

Вместо использования #include для встраивания rc-файла:

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

Я исключаю использование #include и добавляю "system.db.exclude.rc" в мой проект Delphi (.dproj).

Пропатченный "app.db.exclude.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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...