У меня проблема с миграцией с Delphi 2006 на Delphi 2009. Проект, использующий JVCL, жалуется на отсутствие jvconsts.res. Файл определенно там. Путь поиска проекта включает каталог, в котором находится файл. (Примечание: в моем глобальном пути поиска нет JVCL, чтобы сделать его более переносимым)
Но файл должен быть найден, поскольку Delphi Help говорит:
"... компоновщик ищет .res
файлы [...] в каталогах
указывается в поле ввода Путь поиска
на странице каталогов / условий
диалогового окна "Параметры проекта" "
Это не проблема JVCL: минималистичная программа показывает это:
Представьте себе эту структуру каталогов:
C:\Test\ResTest.dpr
C:\Test\Res\Test.res
Вот ResTest.dpr:
program ResTest;
{$R test.res} // not found even if "c:\Test\Res" is in project search path
begin
end.
Это прекрасно компилируется в Delphi 2006, но не в Delphi 2009.
После некоторых поисков я нашел способ сообщить Delphi, где находится файл: путь поиска по гобалу или параметр -R с помощью компилятора командной строки.
Когда я пишу это, я подхожу ближе к реальной проблеме: в Delphi 2006 .cfg-файл содержит строки:
-I"c:\Test\Res"
-U"c:\Test\Res"
-R"c:\Test\Res"
В основном он копирует значения из пути поиска проекта в 3 опции командной строки, и поэтому он гарантирует, что параметр -R имеет правильные значения.
В Delphi 2009 (я установил многословность вывода компилятора как «debug»), я получаю полученную командную строку из IDE:
Если каталог (c: \ Test \ Res) включен в путь поиска проекта:
dcc32.exe --no-config -M -Q -ID:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib" -LE"C:\Users\Public\Documents\RAD Studio\6.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\6.0\Dcp" -O"c:\program files\codegear\rad studio\6.0\Lib" -R"c:\program files\codegear\rad studio\6.0\Lib" -UD:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib" -K00400000 ResTest.dpr
Если каталог включен в глобальный путь поиска
dcc32.exe --no-config -M -Q -ID:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -LE"C:\Users\Public\Documents\RAD Studio\6.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\6.0\Dcp" -O"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -R"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -UD:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -K00400000 ResTest.dpr
Может быть, это трудно увидеть здесь: Разница в параметре -R:
Local Search Path -> -R"c:\program files\codegear\rad studio\6.0\Lib"
Global Search Path -> -R"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res
Так что неудивительно, почему это не работает. Локальный путь поиска не добавляется к параметру -R в Delphi 2009.
Я бы сказал, это явно ошибка, но почему, кажется, ни у кого больше нет этой проблемы? Я могу воспроизвести его на всех машинах, которые мы используем. Может быть, ошибка существует только в немецкой версии Delphi 2009?