Delphi有时会在.dpr文件中的单元路径前面添加{$ R * .res}使用子句,然后在尝试编译时会收到重复的资源警告。
任何人都知道德尔福为什么这么做?我正在使用Delphi 2009,但这是自Delphi 2007(也许是2006年)以来发生的
答案 0 :(得分:8)
这取决于你对.dpr文件做了什么。 Delphi期望文件以某种方式布局,如果您以内部IDE解析器无法正确查找某些内容的方式对其进行修改,则可能会猜错。最初,.dpr文件从未打算让用户随意修改,因此它可能会混淆。 IFDEFS是最常见的罪魁祸首,可能会混淆IDE解析器。
答案 1 :(得分:6)
也许发布您的.dpr有助于说明您的问题。我的项目文件看起来像这样,没有问题:
program Example;
{$R *.res}
uses
Unit1 in 'Unit1.pas' {frmUnit1};
begin
Application.Initialize;
Application.CreateForm(TfrmUnit1, frmUnit1);
Application.Run;
end.
答案 2 :(得分:4)
我已经获得了一些“启发式”来处理IDE与dpr混淆的事实:
答案 3 :(得分:4)
Delphi将{$ R * .res}添加到.dpr文件中,以将它生成的.res文件链接到您的应用程序中。例如。如果将项目保存为MyProject.dpr,Delphi将创建一个文件MyProject.res,其中包含您在Delphi的Project Options中指定的应用程序图标和版本信息。如果没有此.res文件,您的.exe将没有图标或版本信息。
如果您收到重复的资源警告,您的代码中的其他地方可能还有另一个{$ R}编译器指令,该指令也链接在MyProject.res中。它可能是.dpr文件中的重复{$ R * .res},或另一个.pas文件中的{$ R MyProject.res}。删除其他编译器指令而不是Delphi自动生成的指令,您的项目编译就好了。
答案 4 :(得分:4)
Delphi为您添加这些“错误的”{$ R}和{$ R * .res}文本的原因隐藏在DPROJ文件中。 只需使用文本编辑器打开DPROJ文件并搜索$ R * .res并删除这些标记:
<DCCReference Include="..\..\..\Core\IF.Common\uTranslation.Types.pas">
<Form>$R *.res</Form>
</DCCReference>
将其更改为
<DCCReference Include="..\..\..\Core\IF.Common\uTranslation.Types.pas"/>
现在你不会在项目中得到蹩脚的文本(直到下次IDE无法将这样的东西添加到DPROJ文件中。
答案 5 :(得分:2)
这是非常烦人的,没有任何明显的原因发生,并且不能防止发生 - 据我所知:(
答案 6 :(得分:1)
.dpr中的默认{$ R * .res}应该在uses和var子句之间。
有时项目文件被破坏..
只删除源目录中除* .dpr,* .pas,* .dfm之外的任何文件
delphi将重建其他文件,包括* .res
这就是&#39;它