代码之家  ›  专栏  ›  技术社区  ›  Fabio Gomes

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

  •  10
  • Fabio Gomes  · 技术社区  · 17 年前

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

    有人知道为什么德尔菲会那样做吗?我用的是Delphi2009,但这是Delphi2007之后发生的(可能也是2006年)。

    7 回复  |  直到 9 年前
        1
  •  6
  •   Scott W    17 年前

    也许张贴你的.dpr可以帮助说明你的问题。我的项目文件如下所示,没有问题:

    program Example;
    
    {$R *.res}
    
    uses
      Unit1 in 'Unit1.pas' {frmUnit1};
    
    begin
      Application.Initialize;
      Application.CreateForm(TfrmUnit1, frmUnit1);
      Application.Run;
    end.
    
        2
  •  8
  •   Thomas Ahle    17 年前

    这取决于您对.dpr文件所做的其他操作。Delphi希望文件以某种方式进行布局,如果您对其进行了修改,使内部IDE解析器无法正确地找到某些内容,那么它可能会猜错。最初,.dpr文件从未打算让用户随意修改,因此可能会混淆。ifdefs是最常见的罪魁祸首,它会混淆IDE解析器。

        3
  •  4
  •   Uli Gerhardt    17 年前

    我已经获得了一些“启发式方法”来处理这样一个事实,即IDE干扰了DPR:

    1. 在主begin-end块中没有“复杂”的代码(即带有变量或ifs:-)的东西)。我需要做的每件事都被换成了单独的程序。这似乎使IDE解析器更快乐。
    2. 如果我在使用条款中需要$ifdefs,我会制作一个包含$ifdefed单位的“代理单位”,然后 那个 在DPR的使用条款中。
        4
  •  4
  •   Jan Goyvaerts    17 年前

    Delphi将$R*.res添加到.dpr文件中,以将生成的.res文件链接到应用程序中。例如,如果您将项目保存为myproject.dpr,Delphi将创建一个文件myproject.res,其中包含您在Delphi的项目选项中指定的应用程序图标和版本信息。如果没有这个.res文件,您的.exe将没有图标或版本信息。

    如果您收到重复的资源警告,您的代码中可能还有另一个$R编译器指令,该指令也链接到myproject.res中。它可能是.dpr文件中的重复$R*.res,也可能是另一个.pas文件中的重复$R myproject.res。删除另一个编译器指令,而不是Delphi自动生成的指令,您的项目将编译得很好。

        5
  •  4
  •   Z.B.    9 年前

    Delphi添加这些“错误”$R和123;$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文件中为止)。

        6
  •  2
  •   gabr    17 年前

    这很烦人,发生时没有任何明显的原因,无法阻止发生-据我所知:(

        7
  •  1
  •   MtwStark    9 年前

    .dpr中的默认值$R*.Res应该在uses和var子句之间。

    有时项目文件会损坏..
    只需删除源目录中除*.dpr、*.pas、*.dfm以外的任何文件
    Delphi将重建其他文件,包括*.res

    这就是它