我有一个从Delphi 2006迁移到Delphi 2009的问题。使用JVCL的项目抱怨jvconsts.res文件丢失。该文件明确存在。项目搜索路径包括文件所在的目录。(注意:我没有将JVCL添加到全局搜索路径中,以使其更具可移植性)
但是,应该能够找到该文件,因为Delphi Help中说:
“...链接器在Project | Options对话框中的Directories/Conditionals页面上指定的搜索路径输入框中搜索.res文件[...]”
这不是JVCL的问题:一个最简单的程序也会显示出这个问题:
想象一下这个目录结构:
这在Delphi 2006中编译很好,但是在Delphi 2009中不行。经过一些搜索,我找到了一种告诉Delphi文件位置的方法:使用全局搜索路径或-R参数使用命令行编译器。
基本上,它会将项目搜索路径中的值复制到3个命令行选项中,从而确保-R参数具有正确的值。
在Delphi 2009中(我将编译器输出的详细程度设置为“调试”),我从IDE获取了结果命令行:
如果目录(c:\ Test \ Res)包含在项目搜索路径中:
如果该目录包含在全局搜索路径中
也许在这里很难看到:区别在于-R参数:
所以不难理解为什么它无法工作。在Delphi 2009中,本地搜索路径未附加到-R参数。我想说,这显然是一个错误,但为什么似乎没有其他人遇到这个问题呢?我们使用的所有机器上都可以重现此问题。也许这个错误只存在于德语版的Delphi 2009中?
但是,应该能够找到该文件,因为Delphi Help中说:
“...链接器在Project | Options对话框中的Directories/Conditionals页面上指定的搜索路径输入框中搜索.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中(我将编译器输出的详细程度设置为“调试”),我从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
所以不难理解为什么它无法工作。在Delphi 2009中,本地搜索路径未附加到-R参数。我想说,这显然是一个错误,但为什么似乎没有其他人遇到这个问题呢?我们使用的所有机器上都可以重现此问题。也许这个错误只存在于德语版的Delphi 2009中?
qc.embarcadero.com
链接。如果您需要访问旧的QC数据,请查看QCScraper。 - Remy Lebeau