2013-03-13 74 views
3

在我的項目中,我有一個包含versionnumber定義的包含文件「buildversion.h」。 爲了使它更易於管理我心中已經做了一些預處理器「神奇」Visual Studio資源編譯器字符串合併

的問題是,在Visual Studio編輯器的resourcefile不表現得像正常的編譯器,所以我得到「錯誤」 entrys

我的頭文件:

#define MAJOR_VER_NUM 2 
#define MINOR_VER_NUM 3 
#define REV_NUM  9999 
#define STR(x) #x  // helper defines 
#define XSTR(x) STR(x) // helper defines 
#define XXX_FILE_VERSION   MAJOR_VER_NUM,MINOR_VER_NUM,REV_NUM,0 
#define XXX_PRODUCT_VERSION  MAJOR_VER_NUM,MINOR_VER_NUM,REV_NUM,0 
#define XX_FILE_VERSION_STRING XSTR(MAJOR_VER_NUM)", "XSTR(MINOR_VER_NUM)", "XSTR(REV_NUM)", 0" 
#define ICOS_PRODUCT_VERSION_STRING XSTR(MAJOR_VER_NUM)", "XSTR(MINOR_VER_NUM)", "XSTR(REV_NUM)", 0" 
int const MajorVersionNumber = MAJOR_VER_NUM; 
int const MinorVersionNumber = MINOR_VER_NUM; 
int const RevisionNumber  = REV_NUM; 

在我的「main.rc」文件包括我上面的標題和版本塊我寫

VALUE "FileVersion", XXX_FILE_VERSION_STRING 

對於這樣的結果條目是:

2" , 「3」, 「9999」,0

如果使用上述的頭文件中普通的C++代碼substition工作正常,我得到

2,3,9999,0

如預期的那樣。

有什麼辦法可以在資源文件中做這項工作嗎?

回答

2

這是適用於我的代碼,替換爲使用與您的相同的宏名稱。

保持你的版本號和STR助手爲是,則:

#define XXX_FILE_VERSION_DOT MAJOR_VER_NUM.MINOR_VER_NUM.REV_NUM.0 
    #define XXX_FILE_VERSION_COMMA MAJOR_VER_NUM,MINOR_VER_NUM,REV_NUM,0 

    #define XXX_FILE_VERSION_DOT_STR XSTR(XXX_FILE_VERSION_DOT) 
    #define XXX_FILE_VERSION_COMMA_STR XSTR(XXX_FILE_VERSION_COMMA) 

然後在.RC,我發現你需要使用逗號形式只在FILEVERSION部分,像這樣:

FILEVERSION XXX_FILE_VERSION_COMMA 

而在StringFileInfo塊後您使用點字符串形式版本,像這樣:

VALUE "FileVersion", XXX_FILE_VERSION_DOT_STR