Delphi 7编译错误 - .res和.dfm之间的“Duplicate resources(s)”

时间:2008-10-08 21:58:38

标签: delphi

我得到了与下面的错误非常类似的错误:

How can I fix this delphi 7 compile error - "Duplicate resource(s)"

然而,我得到的错误是:

  [Error] WARNING. Duplicate resource(s):
  [Error]   Type 10 (RCDATA), ID TFMMAINTQUOTE:
  [Error]     File P:\[PATH SNIPPED]\Manufacturing.RES resource kept; file FMaintQuote.DFM resource discarded.

Manufacturing.res是默认资源文件(应用程序称为Manufacturing.exe),FMainQuote是其中一种形式。 .dfm文件是纯文本文件,所以我不确定哪些资源是重复的,如何查找并修复它?

如果我再次尝试编译项目,它可以正常工作,但exe的图标与我在“项目选项”中使用“加载图标”按钮设置的图标不同。应用程序上的图标是某种我无法识别的铃声图像。

8 个答案:

答案 0 :(得分:6)

尝试寻找额外的{$ R * .res}或{$ R * .dfm},您可能已从某处复制过。

答案 1 :(得分:5)

Delphi将所有DFM文件转换为资源,并将其命名为类的名称。您可以使用资源编辑器并打开任何基于表单的Delphi应用程序来验证这一点。

在所有单位中搜索TFMMAINTQUOTE表单的实例。它最有可能是两个单元,其中一个没有链接到你的项目,但是通过引用错误单元的uses子句被拉入(错误,因为它以不同的名称保存但具有相同的表单名称,如果它是您项目的一部分,然后编译器会在您首先添加单元时抱怨。

此问题的简单解决方案是在项目中找到TFMMAINTQUOTE表单并将表单重命名为其他表单,但旧的TFMMAINTQUOTE仍然会被拉入。

我建议使用一个好的目录grep工具,例如GExperts中的工具来进行搜索。它可以节省很多时间,如果需要,可以设置为搜索整个硬盘。 GExperts的优势在于它可以免费直接集成到Delphi IDE中。

答案 2 :(得分:2)

尝试重命名制造,重新命名为Manufacturing.bak或其他东西。 Delphi应该重新创建res文件。

您当然需要在新文件的res文件中重新创建任何引用,字符串等,但无论如何都值得尝试......

答案 3 :(得分:1)

我得到了同样的错误。我认为影响因素是:

  1. no * .res-file
  2. 与另一个项目的共同单位
  3. 带错误的项目有一个与另一个项目中的表单同名的表单
  4. 解决方案:重命名表单(在项目中包含错误消息)

答案 4 :(得分:1)

当我尝试将DBISAM数据库组件重新安装到调色板时,这种“警告。重复资源:文件资源保留资源被丢弃”最近出现在Delphi 7中。

File D:\DELPHI\DBISAM\db324d6d.res resource kept; file 
  D:\DELPHI\DBISAM\db324d6d.res resource discarded.
Type 14 (ICON GROUP), ID MAINICON:

正如您在上面所看到的,当正好与 RES相关的Delphi错误情况出现时,同一资源有两个相同的通知,在这里“D:\ DELPHI \ DBISAM \ db324d6d.res“文件。

我首先想到来自两个供应商软件包的资源存在冲突,所以我撕掉并撕掉了其他已安装的组件。经过4个小时左右的努力奋斗,我终于发现DBISAM DPK包文件中出现了另一个资源引用:

package db324d6d;
{$R *.res}
{$R 'db324d6d.res'}
...

现在我记得DBIsam大约一周前左右抱怨过“缺少.RES资源文件”。我经常检查,并确保该行存在于DPK文件中,并且RES文件位于磁盘上。 那时我可能已经以某种方式将第二行添加到DPK文件中,但是已经构建了Package,并且我整个星期都能够使用它。

现在额外的线回击了,并且很难击中它。我只是喜欢周六4小时的挣扎。

很快,如何修复它:删除后者的那些资源行。当它们都指向同一资源时出现错误。

所以,只剩下这个:

package db324d6d;
{$R *.res}
...

Phew,我希望这能帮助别人。

答案 5 :(得分:0)

额外的{$R *.res}在* .dpr文件中,如下所示:

program Test;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Sample in 'Sample.pas',
  Proc in 'Proc.pas';

{$R *.res} //<----delete this if you put them in the Unt1.pas. ok.

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

答案 6 :(得分:0)

如果您重命名一个from,并且在其他单位的使用部分中引用了此表单,则会出现上述错误。

解决方案是以上的混合物。

(1)更改以.bak结尾的资源文件(以便稍后重新创建)。 (2)搜索所有单元并将旧单元/表单名称的引用更改为新单元。 (3)重新编译,现在可以了。

答案 7 :(得分:0)

编辑RES文件并从中删除重复的资源。这样您就可以保留原始图标。