2

以前の質問に基づいてビルド構成の作成に取り組んでいます。ビルド構成を作成し、さまざまなビルドの条件付き宣言をcustom.h. 現在、次のようになっています。

#pragma once

#if defined(ELITE_BUILD)
    #define BUILD 3 // 1: personal, 2: select, 3: elite
#elif defined(SELECT_BUILD)
    #define BUILD 2
#elif defined(PERSONAL_BUILD)
    #define BUILD 1
#endif

私の.rcファイルの1つに、versionconfig.h次のようなインクルードがあります(多少編集されています):

#if BUILD == 1
#define STRDESCRIPTION  "Personal Edition"
#elif BUILD == 2
#define STRDESCRIPTION  "Select Edition"
#elif BUILD == 3
#define STRDESCRIPTION  "Elite Edition"
#pragma message(STRDESCRIPTION)
#endif

#pragmaロギング作業としてコマンドを追加しました。そのインクルードの後、.rc ファイルの関連部分は次のようになります (ここでも、簡潔にするために少し編集されています)。

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "FileDescription", STRDESCRIPTION
        END
    END
END

このプロジェクトをコンパイルしようとすると、エラーが発生しますerror RC2104 : undefined keyword or key name: STRDESCRIPTION。私は少し途方に暮れています。値は存在し、設定後すぐにログに記録でき、#undefコマンドはありません。

-- 編集 --

if ブロックの外側にプレースホルダーの定義を追加すると、プロジェクトはコンパイルされますが、値が表示されないため、問題は条件定義に関連しているようです。この時点で私を最も混乱させているのは#pragma message、条件付きブロック内にコマンドを配置でき、それが適切に実行されることですが、そこで定義された値が存在しないことです。誰かが私のためにこれに光を当ててくれることを願っています。

4

1 に答える 1

4

見つけた。Visual Studio では、リソース ファイルのプリプロセッサ定義をプロジェクトとは別に設定する必要があります。ELITE_BUILDリソースのプリプロセッサ セクションに追加するとすぐに、すべてが期待どおりに機能しました。

于 2012-02-15T17:59:32.437 に答える