[英]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.