簡體   English   中英

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

[英]Delphi adding {$R *.res} in the .dpr file

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.

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文件中。

我已經獲得了一些“啟發式”來處理IDE與dpr混淆的事實:

  1. 主開始 - 結束塊中沒有“復雜”代碼(即帶有變量或ifs的東西:-))。 我需要完成的所有事情都被換成了單獨的例程。 這似乎使IDE解析器更快樂。
  2. 如果我的使用條款中需要$ IFDEF的宣告我讓其中包含$ IFDEFed單位,並把 DPR的使用條款中“代理單位”。

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自動生成的指令,您的項目編譯就好了。

這是非常煩人的,沒有任何明顯的原因發生,不能防止發生 - 據我所知:(

.dpr中的默認{$ R * .res}應該在uses和var子句之間。

有時項目文件被破壞..
只刪除源目錄中除* .dpr,* .pas,* .dfm之外的任何文件
delphi將重建其他文件,包括* .res

而已

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM