Delphi有时会在.dpr文件中的单元路径前面添加{$ R*.res}使用子句,然后在尝试编译时会收到重复的资源警告.
任何人都知道德尔福为什么这么做?我正在使用Delphi 2009但这种情况发生在Delphi 2007之后(也可能是2006年)
这取决于你对.dpr文件做了什么.Delphi期望以某种方式布置文件,如果您以内部IDE解析器无法正确查找某些内容的方式对其进行修改,则可能会猜错.最初,.dpr文件从未打算让用户随意修改,因此它可能会混淆.IFDEFS是最常见的罪魁祸首,可能会混淆IDE解析器.
也许发布你的.dpr有助于说明你的问题.我的项目文件看起来像这样,没有问题:
program Example;
{$R *.res}
uses
Unit1 in 'Unit1.pas' {frmUnit1};
begin
Application.Initialize;
Application.CreateForm(TfrmUnit1, frmUnit1);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
为什么Delphi向您添加这些“错误的” {$ R}和{$ R * .res}文本的问题隐藏在DPROJ文件中。只需使用文本编辑器打开DPROJ文件并搜索$ R * .res并删除以下标签:
<DCCReference Include="..\..\..\Core\IF.Common\uTranslation.Types.pas">
<Form>$R *.res</Form>
</DCCReference>
Run Code Online (Sandbox Code Playgroud)
更改为
<DCCReference Include="..\..\..\Core\IF.Common\uTranslation.Types.pas"/>
Run Code Online (Sandbox Code Playgroud)
现在,您将不会在项目中得到get脚的文本(直到下次IDE无法将此类内容添加到DPROJ文件中时为止)。
Delphi 将 {$R *.res} 添加到您的 .dpr 文件以将其生成的 .res 文件链接到您的应用程序中。例如,如果您将项目保存为 MyProject.dpr,Delphi 将创建一个文件 MyProject.res,其中包含您在 Delphi 的项目选项中指定的应用程序图标和版本信息。如果没有这个 .res 文件,您的 .exe 将没有图标或版本信息。
如果您收到重复资源警告,则您的代码中其他地方可能还有另一个 {$R} 编译器指令,该指令也链接到 MyProject.res。它可能是 .dpr 文件中的重复 {$R *.res},或另一个 .pas 文件中的 {$R MyProject.res}。删除另一个编译器指令而不是 Delphi 自动生成的那个,您的项目将编译得很好。