3

私のプロジェクトには、バージョン番号の定義を含むインクルード ファイル「buildversion.h」があります。より管理しやすくするために、プリプロセッサの「魔法」をいくつか行いました

問題は、Visual Studio のリソース ファイル エディタが通常のコンパイラのように動作しないため、「間違った」エントリが取得されることです。

私のヘッダーファイル:

#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++ コードで使用すると、置換は正常に機能します。

2、3、9999、0

予想通り。

リソースファイルでこれを機能させる方法はありますか?

4

1 に答える 1

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
于 2013-03-14T03:16:04.500 に答える