none
RC2ファイルでの#if directiveについて RRS feed

  • 質問

  • 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の処理が変わったのでしょうか?

     

     

    2010年10月14日 7:07

回答

  • 以下の通り.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対象になりません。

    • 回答の候補に設定 山本春海 2010年10月28日 7:16
    • 回答としてマーク 山本春海 2010年11月2日 2:19
    2010年10月14日 10:34
  • CL向けの/DとRC向けの/Dを間違って設定していないか、正しく設定されているか(/d "DEFINE2_DEF=1")、

    プロジェクトの設定 -> リソース -> 一般やコマンドラインで確認してみてください。

    • 回答の候補に設定 山本春海 2010年10月28日 7:16
    • 回答としてマーク 山本春海 2010年11月2日 2:19
    2010年10月14日 11:17

すべての返信

  • 以下の通り.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対象になりません。

    • 回答の候補に設定 山本春海 2010年10月28日 7:16
    • 回答としてマーク 山本春海 2010年11月2日 2:19
    2010年10月14日 10:34
  • 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 が未定義になるようです。

     

     

     

    2010年10月14日 10:56
  • CL向けの/DとRC向けの/Dを間違って設定していないか、正しく設定されているか(/d "DEFINE2_DEF=1")、

    プロジェクトの設定 -> リソース -> 一般やコマンドラインで確認してみてください。

    • 回答の候補に設定 山本春海 2010年10月28日 7:16
    • 回答としてマーク 山本春海 2010年11月2日 2:19
    2010年10月14日 11:17