トップ回答者
RC2ファイルでの#if directiveについて

質問
-
RC2ファイルで、以下のように #if のネストがあった場合、#if のネストの判定がうまくできていないようです。
RC2ファイルの抜粋
#if DEFINE1
IDR_DCZTYPE_SRVR_IP TOOLBAR DISCARDABLE 16, 15
BEGIN
BUTTON ID_FILE_PRINT
SEPARATOR
BUTTON ID_SCREEN_ZOOM
BUTTON ID_SCREEN_ZOOM_AREA
BUTTON ID_SCREEN_SCROLL
BUTTON ID_SCREEN_ZOOM_AS_PAPER
#if DEFINE2
SARATOR
BUTTON ID_ZUMEN_CHECK
BUTTON ID_ZUMEN_ALCHECK
BUTTON ID_OPEN_LOGFILE
BUTTON ID_LOGFILE_SETTING
#endif
END
#endif
こんな感じでRC2ファイルを作成した場合、DEFINE1、DEFINE2ともに 真でも#if DEFINE2の部分が有効にならないVS6の時は、この書き方で問題が無かったが、VS2008で#ifの処理が変わったのでしょうか?
回答
-
以下の通り.rc2に記載してみましたが、期待通りBuildされましたよ。
Build後のexe Resourceを確認しています。
#define TEST1 1 #define TEST2 1 #if TEST1 STRINGTABLE BEGIN 10000 "String1" END #if TEST2 STRINGTABLE BEGIN 20000 "String2" END #endif #endif
spell missがないか、defineが.rc2まで通っているか、確認してみてはいかがでしょうか。
上記の場合、TEST2 0の場合やTEST2のdefineがない場合はCompile対象になりません。
すべての返信
-
以下の通り.rc2に記載してみましたが、期待通りBuildされましたよ。
Build後のexe Resourceを確認しています。
#define TEST1 1 #define TEST2 1 #if TEST1 STRINGTABLE BEGIN 10000 "String1" END #if TEST2 STRINGTABLE BEGIN 20000 "String2" END #endif #endif
spell missがないか、defineが.rc2まで通っているか、確認してみてはいかがでしょうか。
上記の場合、TEST2 0の場合やTEST2のdefineがない場合はCompile対象になりません。
-
kozzさん 回答ありがとうございます。
質問を出した後で、気がついたのですが、最初の質問で説明不足がありました。
1..RC2ファイルの最初のあたりで、
#include "edition.h" を追加します。2.edtion.h は
#if DEFINE1_DEF
#define DEFINE1 1
#endif#if DEFINE2_DEF
#define DEFINE1 1
#define DEFINE2 1
#endifとして、DEFINE1_DEF、DEFINE2_DEFは、ビルドオプション /Dで 設定するように構成マネージャでそれぞれビルドの構成を用意する。この時、DEFINE2_DEF の構成の時、どーも DEFINE2 が未定義になるようです。