Delphi在.dpr文件中添加{$ R * .res}

时间:2008-11-25 16:32:59

标签: delphi

Delphi有时会在.dpr文件中的单元路径前面添加{$ R * .res}使用子句,然后在尝试编译时会收到重复的资源警告。

任何人都知道德尔福为什么这么做?我正在使用Delphi 2009,但这是自Delphi 2007(也许是2006年)以来发生的

7 个答案:

答案 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混淆的事实:

  1. 主开始 - 结束块中没有“复杂”代码(即带有变量或ifs的东西:-))。我需要完成的所有事情都被换成了单独的例程。这似乎使IDE解析器更快乐。
  2. 如果我在uses子句中需要$ IFDEF,我会创建一个“代理单元”,其中包含$ IFDEFed单元,并将 放在dpr的uses子句中。

答案 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;它