2012-03-05 79 views
0

假設你有一個傳統的Visual C++ 2010項目的標籤,像這樣定義的:設置標籤文本

[foo.rc] 
    LTEXT   "Foo",IDC_STATIC,42,42,42,42 

在資源(.RC)文件。

現在,你要基於常量你在頭文件中定義的文本,就像這樣:

[foo.rc] 
    LTEXT   FOO_TEXT,IDC_STATIC,42,42,42,42 

凡FOO_TEXT在一些其他的方式是以前定義的,例如:

[bar.h] 
    #define FROBNICATE "F" 
    #define OO "o" 
    #define ICANTTHINKOFMETASYNTACTICVARIABLESBEGINNINGWITHO "o" 
    #define FOO_TEXT (FROBNICATE OO ICANTTHINKOFMETASYNTACTICVARIABLESBEGINNINGWITHO) 

只有不起作用,因爲.RC文件沒有頭文件,以及RC編譯器抱怨,告訴你:

[Build output] 
    1>foo.rc(42): error RC2116: expecting number for ID 
    1> 
    1> 
    1>foo.rc(42): error RC2108: expected numerical dialog constant 

你會做什麼?

要澄清,是的,整個字符串在編譯時是已知的,但它也需要從較小的字符串構造(在這種情況下,版本信息和發佈類別(開發,發佈和另一個) )。當然,我也可以編寫這樣的C++代碼,但對我來說這似乎很不雅觀。

那麼,有沒有更好的方法?

回答

1

我不認爲你能夠在沒有C++代碼的情況下完成你想要的任務。見註釋this msdn articl E:

不要的#define 資源編譯器在其指令的瞭解非常有限使用括號。因此,舉例來說,這樣的:

#define RESTYPE_FILE  (256) 

會默默地被忽略,而這一點:

#define RESTYPE_FILE 256 

會工作。顯然,試圖使用表達式或任何複雜的表達式會默默地失敗,讓你想知道爲什麼你不能加載該資源。

+0

是的,看起來不像我會解決它。感謝你的回答 :) – ralokt 2012-03-05 21:23:29