4

I have a rc entry:

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

When I compile the rc file with cgrc.exe or brcc32.exe, I encounter this error:

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

This is due to the resource name "CC6C210B-2EAC" was interpreted as exponent value (-2EA). The A character after -2E is not valid exponent value.

If I change the rc entry to something like

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

The resource compile without any error.

Unfortunately, I can't simply change the resource name as it has been widely used. Is there any ways to make rc do not interpret resource name as exponent value?

4

2 に答える 2

0

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"

これを Microsoft の rc.exe でテストしました。Embarcadero の brcc32.exe は引き続きエラーを返します。

エラー resrc.rc 1 1: リソース名またはリソース タイプ名が必要です

そのため、それまたは IDE の組み込みリソース コンパイラを使用する場合は、上記のように名前を変更した GUID のようなものを使用する必要があります。

于 2011-08-20T06:38:00.517 に答える
0

Microsoft リソース コンパイラ rc を使用することをお勧めします。rc のドキュメントによると、リソース定義の最初のトークンは名前または 16 ビット整数でなければなりません。brcc32 がこれを実際の値として解釈したい理由は、私にはまったくわかりません。

これがうまくいかない場合は、GUID を ' ではなく " で囲んでみてください。

于 2011-08-20T07:10:53.647 に答える