Delphi 2009中的Bug?->项目搜索路径中找不到*.res文件(在Delphi 2006中可以)

6
我有一个从Delphi 2006迁移到Delphi 2009的问题。使用JVCL的项目抱怨jvconsts.res文件丢失。该文件明确存在。项目搜索路径包括文件所在的目录。(注意:我没有将JVCL添加到全局搜索路径中,以使其更具可移植性)
但是,应该能够找到该文件,因为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中?
1个回答

2
一种解决方法是在您的代码中使用以下替代方案:
{$R res\test.res}

这在我的Delphi 2009系统上都有效,无论是使用IDE还是命令行编译器。
请注意,我同意他们破坏了现有的功能,您是否已经向质量门户添加了报告?如果没有,请访问ttps://quality.embarcadero.com进行添加(以前这是搜索引擎索引的http://qc.embarcadero.com,但已被关闭;https://quality.embarcadero.com需要一个免费账户进行搜索)。

这个方案可以在我们的代码中运行,但我必须修改第三方代码(JVCL),而我真的很想避免这样做。 - Steffen Binas
我在 QualityCentral 中创建了一个针对这个 Bug #73249 的条目。 - Steffen Binas
2
我同意您不想修改第三方代码的观点。感谢您的报告。 我刚刚检查了http://qc.codegear.com/wc/qcmain.aspx?d=73249,修改了一些报告字段,然后升级了它,以便CodeGear的Q&A团队可以在其内部系统中看到它。 - Jeroen Wiert Pluimers
请注意,QualityCentral现已关闭,因此您无法再访问qc.embarcadero.com链接。如果您需要访问旧的QC数据,请查看QCScraper - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接