簡體   English   中英

編譯rc文件會遇到“預期指數值”錯誤

[英]Compile rc files encounter “expected exponent value” error

我有一個rc條目:

{CC6C210B-2EAC-4F6C-89E7-0D2FEFFCE278}  8000  "MyFile.txt"

當我用cgrc.exe或brcc32.exe編譯rc文件時,我遇到此錯誤:

[BRCC32 Error] system.core.rc(1): expected exponent value, not 'a'

這是由於資源名稱“CC6C210B-2EAC”被解釋為指數值(-2EA)。 -2E之后的A字符不是有效的指數值。

如果我將rc條目更改為類似的內容

{CC6C210B-2E2C-4F6C-89E7-0D2FEFFCE278}  8000  "MyFile.txt"

資源編譯沒有任何錯誤。

不幸的是,我不能簡單地更改資源名稱,因為它已被廣泛使用。 有沒有辦法讓rc不將資源名稱解釋為指數值?

我不太確定使用GUID作為資源名稱是個好主意。 如果你真的想這樣做,你可能想把它“編碼”為“普通”標識符,例如

_CC6C210B_2EAC_4F6C_89E7_0D2FEFFCE278  8000  "MyFile.txt"

您只需編寫一組簡單例程來“編碼”和“解碼”普通GUID字符串和“已編碼”表單之間的此類值。

function DecodeToGUID(const renamedGUID: string): string;
begin
  Result := '{' + Copy(ReplaceString(renamedGUID, '_', '-', [rfReplaceAll]), 2, MaxInt)) + '}';
end;

我將把你想象中的另一個例程的實現留下。 ;-)


更新

如果您將ID放在引號中,則應使用rc.exe進行編譯。 如果沒有引號,資源編譯器會將其視為預處理程序指令並且非常混淆:

"{CC6C210B-2EAC-4F6C-89E7-0D2FEFFCE278}"  8000  "MyFile.txt"

我用微軟的rc.exe測試了這個。 Embarcadero的brcc32.exe仍然會出錯:

錯誤resrc.rc 1 1:期望資源名稱或資源類型名稱

因此,如果您想使用它,或IDE的內置資源編譯器,您將必須使用類似於重命名的GUID,如上所述。

我建議您使用Microsoft資源編譯器rc。 根據rc的文檔,資源定義的第一個標記應該是名稱或16位整數。 為什么brcc32想要把它解釋為一個真正的價值是超出我的。

如果這不起作用,請嘗試將GUID括在引號中,而不是'。

暫無
暫無

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

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