Delphi 2009中的错误? - >*.在项目搜索路径中找不到(在Delphi 2006中有效)

Ste*_*nas 6 delphi delphi-2009

我有一个问题从Delphi 2006迁移到Delphi 2009.一个使用JVCL的项目抱怨jvconsts.res丢失了.该文件绝对存在.项目搜索路径包括文件所在的目录.(注意:我的全局搜索路径中没有JVCL以使其更具可移植性)

但是应该找到该文件,正如Delphi帮助所说:

"...链接器在"项目|选项"对话框的"目录/条件"页面上的"搜索路径"输入框中指定的目录中搜索.res文件[...]

这不是JVCL问题:简约程序显示:

想象一下这个目录结构:

C:\Test\ResTest.dpr
C:\Test\Res\Test.res
Run Code Online (Sandbox Code Playgroud)

这是ResTest.dpr:

program ResTest;

{$R test.res} // not found even if "c:\Test\Res" is in project search path

begin
end.
Run Code Online (Sandbox Code Playgroud)

这在Delphi 2006中编译得很好但在Delphi 2009中没有编译.经过一些搜索我发现,一种告诉Delphi文件所在的方法:使用命令行编译器的gobal搜索路径或-R参数.

在我写这篇文章时,我更接近真正的问题:在Delphi 2006中,.cfg-File包含以下行:

-I"c:\Test\Res"
-U"c:\Test\Res"
-R"c:\Test\Res"
Run Code Online (Sandbox Code Playgroud)

基本上,它将项目搜索路径中的值复制到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
Run Code Online (Sandbox Code Playgroud)

如果目录包含在全局搜索路径中

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   
Run Code Online (Sandbox Code Playgroud)

也许这里很难看到:区别在于-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
Run Code Online (Sandbox Code Playgroud)

所以难怪它为什么不起作用.本地搜索路径未附加到Delphi 2009中的-R参数.

我会说,这显然是一个错误,但为什么似乎没有其他人有这个问题?我可以在我们使用的所有机器上重现它.也许这个错误只出现在德语版的Delphi 2009中?

Jer*_*ers 2

解决方法是将其放入您的代码中:

{$R res\test.res}
Run Code Online (Sandbox Code Playgroud)

这适用于我的 Delphi 2009 系统,包括 IDE 和命令行编译器。

请注意,我同意他们破坏了现有功能,您是否向质量门户添加了报告?如果没有,请执行:ttps://quality.embarcadero.com(这曾经是索引为http://qc.embarcadero.com 的搜索引擎,但已被关闭;https://quality.embarcadero.com需要用于搜索的免费帐户)。

  • 我同意您不想修改第 3 方代码的事实。感谢您的报告。我刚刚检查了 http://qc.codegear.com/wc/qcmain.aspx?d=73249,修改了一些报告字段,然后进行了推广,以便 CodeGear 的问答团队可以在他们的内部系统中看到它 (2认同)