テクニカル ノート 35:Visual C++ における複数のリソース ファイルとヘッダー ファイルの使用

Note

次のテクニカル ノートは、最初にオンライン ドキュメントの一部とされてから更新されていません。 結果として、一部のプロシージャおよびトピックが最新でないか、不正になります。 最新の情報について、オンライン ドキュメントのキーワードで関係のあるトピックを検索することをお勧めします。

このノートでは、Visual C++ のリソース エディターが、単一プロジェクト内または複数のプロジェクト間で共有されている複数のリソース ファイルとヘッダー ファイルをサポートする方法と、そのサポートを活用する方法について説明します。 このノートでは、次の質問に回答します。

  • 単一プロジェクトを複数のリソース ファイルやヘッダー ファイルに分割するのはどのような場合ですか。また、どのような方法で分割しますか

  • 2 つの.RCファイル間で共通のヘッダー .H ファイルを共有する方法

  • プロジェクト リソースを複数 .RC のファイルに分割する方法

  • ファイル間.RC.CPPのビルド依存関係を管理する方法 (および.Hツール)

プロジェクトにリソース ファイルを追加すると、ClassWizard は追加されたファイル内のリソースを認識できないことに注意してください。

このノートは、上記の質問に回答するために次のように構成されています。

  • Visual C++ でリソース ファイルとヘッダー ファイル を管理する方法の概要では、Visual C++ の [リソース セットインクルード] コマンドを使用して、同じプロジェクト内の複数のリソース ファイルとヘッダー ファイルを使用する方法の概要を示します。

  • AppWizard によって作成された.Hファイルの分析では、AppWizard によって作成.RCされたアプリケーションによって使用される複数のリソース ファイルとヘッダー ファイルが調べます。 これらのファイルは、プロジェクトに追加する可能性のあるリソース ファイルやヘッダー ファイルの適切なモデルとして機能します。

  • 追加のヘッダー ファイル を含める場合は、複数のヘッダー ファイルを含める場所について説明し、その方法について詳しく説明します。

  • 2 つの .RC ファイル 間でヘッダー ファイルを共有すると、異なるプロジェクトまたは同じプロジェクト内の複数 .RC のファイル間で 1 つのヘッダー ファイルを共有する方法が示されます。

  • 同じプロジェクトで複数のリソース ファイルを使用すると、プロジェクト を複数 .RC のファイルに分割する場所が説明され、その方法の詳細が示されます。

  • 編集できない Visual C++ ファイル の適用では、Visual C++ がカスタム リソースを編集したり、意図せずに再フォーマットしたりしないようにする方法について説明します。

  • 複数の Visual C++ で編集されたファイルで共有される.RCシンボルの管理では、複数.RCのファイル間で同じシンボルを共有する方法と、重複する ID 数値を割り当てないようにする方法について説明します。

  • ファイル.CPP.H.RCの依存関係の管理では、リソース シンボル ファイルに依存する不要なファイルの再コンパイルを .CPP Visual C++ で回避する方法について説明します。

  • Visual C++ が Set Includes 情報 を管理する方法は、Visual C++ がファイルに含まれる複数の (入れ子になった) .RC ファイルと複数のヘッダー ファイルを追跡する方法に関する技術的な詳細を .RC 提供します。

Visual C++ でリソース ファイルとヘッダー ファイルを管理する方法の概要

Visual C++ は、1 つの .RC リソース ファイルと対応する .H ヘッダー ファイルを、密結合されたファイルのペアとして管理します。 リソースを編集してファイルに .RC 保存すると、シンボルを間接的に編集して、対応する .H ファイルに保存します。 (Visual C++ の MDI ユーザー インターフェイスを使用して) 複数 .RC のファイルを一度に開いて編集できますが、特定 .RC のファイルに対して、対応するヘッダー ファイルを 1 つだけ間接的に編集します。

リソース ビューの [リソースインクルード] ダイアログ

リソースインクルードアクセスするには、リソースビュー開き、ファイルを.RC右クリックして[リソースインクルード]を選択します。

[シンボル用のヘッダー ファイル]

既定では、Visual C++ では、リソース ファイル RESOURCE.Hの名前 (たとえば MYAPP.RC) に関係なく、対応するヘッダー ファイルに常に名前が付けられます。 Visual C++ の [リソースインクルード] ダイアログの [シンボル ヘッダー ファイル: ] セクションでは、このヘッダー ファイルの名前を変更できます。 セクションの編集ボックスに新しいファイル名を入力します。

Note

リソース ファイルが、ファイルと .RC 同じディレクトリに存在しない場合、適切に読み取るために、相対パスの先頭に escaped-'\' を付加する必要があります。

[読み取り専用ヘッダー ファイル]

Visual C++ では、特定 .RC のファイルに対して 1 つのヘッダー ファイルのみが編集されますが、Visual C++ では、追加の読み取り専用ヘッダー ファイルで定義されているシンボルへの参照がサポートされます。 [リソースインクルード] ダイアログの [読み取り専用シンボル ディレクティブ: ] セクションでは、任意の数の読み取り専用ヘッダー ファイルを読み取り専用シンボル ディレクティブとして指定できます。 "読み取り専用" 制限は、ファイルに .RC 新しいリソースを追加するときに、読み取り専用ヘッダー ファイルで定義されているシンボルを使用できることを意味します。 ただし、リソースを削除しても、シンボルは読み取り専用ヘッダー ファイルで定義メイン。 読み取り専用シンボルに割り当てられた数値を変更することはできません。

[コンパイル時に追加するファイル]

Visual C++ では、リソース ファイルの入れ子もサポートされています。この場合、ある .RC ファイルはディレクティブを #include 使用して別のファイルに含まれます。 Visual C++ を使用して特定 .RC のファイルを編集すると、含まれているファイル内のリソースは表示されません。 ただし、ファイルを .RC コンパイルすると、含まれるファイルもコンパイルされます。 [リソースインクルード]ダイアログの[コンパイル時ディレクティブ:]セクションでは、コンパイル時ディレクティブとして含める任意の数の.RCファイルを指定できます。

コンパイル時ディレクティブとして指定されていない* 別.RCのファイルを.RC含むファイルを Visual C++ に読み込んだ場合の動作に注意してください。 この状況は、以前にテキスト エディターを使用して手動でメインしたファイルを Visual C++ .RC に取り込むときに発生する可能性があります。 Visual C++ は、インクルード .RC されたファイルを読み取ると、含まれているリソースを親 .RC ファイルにマージします。 親 .RC ファイルを保存すると、 #include ステートメントは実質的に、含まれているリソースに置き換えられます。 このマージを行わない場合は、Visual C++ に読み込む前に親.RCファイルからステートメントを削除#includeしてから、Visual C++ を使用して、コンパイル時ディレクティブと同じ#includeステートメントを追加し直す必要があります。

Visual C++ は、上記の 3 種類の Set をファイルに.RC保存します。ディレクティブとTEXTINCLUDEリソースの情報 (シンボル ヘッダー ファイル、読み取り専用シンボル ディレクティブ、コンパイル時ディレクティブ) #includeが含まれます。 通常は処理する必要のない実装の詳細であるリソースについては TEXTINCLUDE 、「Visual C++ がセットを管理する方法」に 情報が含まれています。

AppWizard で作成された .RC ファイルの .H 分析

AppWizard が生成したアプリケーション コードを調べると、Visual C++ が複数のリソース ファイルとヘッダー ファイルを管理する方法を把握できます。 以下に示すコードの抜粋は、既定のオプションを MYAPP 使用して AppWizard によって生成されたアプリケーションからの抜粋です。

AppWizard で作成したアプリケーションは、次の図に要約するように、複数のリソース ファイルと複数のヘッダー ファイルを使用します。

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        AFXRES.RC
        AFXPRINT.RC

Visual C++ の [ファイル] - [インクルード ファイルの設定] コマンドを使用して、これら複数のファイルの関係を表示できます。

MYAPP.RC
Visual C++ を使用して編集するアプリケーション リソース ファイル。

RESOURCE.H は、アプリケーション固有のヘッダー ファイルです。 常に AppWizard によって名前が付けられ RESOURCE.H 、Visual C++ のヘッダー ファイルの既定の名前付けと一致します。 このヘッダー ファイルは #include 、リソース ファイル (MYAPP.RC) の最初のステートメントです。

//Microsoft Visual C++ generated resource script
//
#include "resource.h"

RES\MYAPP.RC2
Visual C++ では編集されず、最終的なコンパイル済みファイルに含まれるリソースが .EXE 含まれます。 Visual C++ は (このリリースの新しい機能である) バージョン リソースを含め、標準のリソースすべてを編集できるため、AppWizard は既定ではこのようなリソースを作成しません。 開発者が独自のカスタム形式リソースをこのファイルに追加しようとする場合は、AppWizard によって空のファイルが生成されます。

カスタムの書式設定されたリソースを使用する場合は、Visual C++ テキスト エディターを使用してリソースを追加 RES\MYAPP.RC2 および編集できます。

AFXRES.RC フレームワークの AFXPRINT.RC 特定の機能に必要な標準リソースを含みます。 同様 RES\MYAPP.RC2に、これら 2 つのフレームワークで提供されるリソース ファイルは末尾に含まれており、[インクルードの MYAPP.RC設定] ダイアログ ボックスのコンパイル時ディレクティブで指定されます。 したがって、Visual C++ での編集中にこれらのフレームワーク リソースを直接表示または編集 MYAPP.RC することはありませんが、アプリケーションのバイナリ .RES ファイルと最終 .EXE ファイルにコンパイルされます。 標準的なフレームワーク リソースの詳細 (これらを変更する手順など) については、テクニカル ノート 23 を参照してください。

AFXRES.Hは、フレームワークによって使用され、特にで使用AFXRES.RCされる標準シンボルをID_FILE_NEW定義します。 AFXRES.Hまた、Visual C++ で生成された.RCファイルにAFXRES.RC必要なサブセットWINDOWS.Hを含むインクルードWINRES.Hも使用#includeします。 定義 AFXRES.H されているシンボルは、アプリケーション リソース ファイル (MYAPP.RC) を編集するときに使用できます。 たとえば、 ID_FILE_NEW ファイルのメニュー リソースの FileNew メニュー項目に MYAPP.RC 使用されます。 これらのフレームワーク定義シンボルは変更または削除できません。

追加のヘッダー ファイルを含む

AppWizard によって作成されたアプリケーションには、2 つのヘッダー ファイル RESOURCE.H (および AFXRES.H. アプリケーション固有の場合のみ RESOURCE.H 。 次の状況では、追加の読み取り専用なヘッダー ファイルをインクルードする必要が生じることがあります。

ヘッダー ファイルは、外部ソースから提供することがあります。または、複数のプロジェクト間でヘッダー ファイルを共有するか、同じプロジェクトの複数の部分で共有することもあります。

ヘッダー ファイルには、Visual C++ でファイルの保存時に変更やフィルター処理を行わない書式設定とコメントがあります。 たとえば、次のようにシンボル算術演算を使用する #define を保持したいとします。

#define RED 0
#define BLUE 1
#define GREEN 2
#define ID_COLOR_BUTTON 1001
#define ID_RED_BUTTON (ID_COLOR_BUTTON + RED)
#define ID_BLUE_BUTTON (ID_COLOR_BUTTON + BLUE)
#define ID_GREEN_BUTTON (ID_COLOR_BUTTON + GREEN)

次のように、Resource Includes コマンドを使用してステートメントを 2 番目の読み取り専用シンボル ディレクティブとして指定#includeすることで、追加の読み取り専用ヘッダー ファイルを含めることができます。

#include "afxres.h"
#include "second.h"

ファイル関係の新しい図は次のようになります。

                   AFXRES.H
    RESOURCE.H     SECOND.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2  
        AFXRES.RC
        AFXPRINT.RC

2 つの .RC ファイル間でヘッダー ファイルを共有する

異なるプロジェクト内の 2 つの .RC ファイル間、または同じプロジェクトの場合は、ヘッダー ファイルを共有できます。 これを行うには、上記の読み取り専用ディレクティブ手法を両方 .RC のファイルに適用します。 2 つの .RC ファイルが異なるアプリケーション (異なるプロジェクト) 用である場合、結果を次の図に示します。

     RESOURCE.H   AFXRES.H   RESOURCE.H  
    (for MYAPP1)  SECOND.H   (for MYAPP2)
          \       /     \       /
           \     /       \     /
          MYAPP1.RC      MYAPP2.RC
           /    \        /     \
          /      \      /       \
RES\MYAPP1.RC2  AFXRES.RC     RES\MYAPP2.RC2
                AFXPRINT.RC

2 番目のヘッダー ファイルが同じアプリケーション (プロジェクト) 内の 2 つの .RC ファイルによって共有される場合について、以下で説明します。

同じプロジェクトで複数のリソース ファイルを使用する

Visual C++ とリソース コンパイラは、1 つの.RCファイルを別のファイルに含むディレクティブを使用して#include、同じプロジェクト内の複数.RCのファイルをサポートします。 複数の入れ子も許可されます。 プロジェクトのリソースを複数 .RC のファイルに分割するには、さまざまな理由があります。

  • リソースを複数 .RC のファイルに分割すると、複数のプロジェクト チーム メンバー間で多数のリソースを管理する方が簡単です。 ソース管理パッケージを使用してファイルをチェックし、変更をチェックする場合、リソースを複数.RCのファイルに分割すると、リソースに対する変更の管理を細かく制御できます。

  • リソースの一部に対して 、#endif#defineなどの#ifdefプリプロセッサ ディレクティブを使用する場合は、リソース コンパイラによってコンパイルされる読み取り専用リソースでそれらを分離する必要があります。

  • コンポーネント .RC ファイルは、1 つの複合 .RC ファイルよりも速く Visual C++ で読み込んで保存します。

  • 人間が判読できる形式でテキスト エディターを使用してリソースをメインする場合は、Visual C++ の編集とは別のファイルに.RC保持する必要があります。

  • 別の特殊なデータ エディターで解釈できるバイナリまたはテキスト形式でユーザー定義リソースを保持する必要がある場合は、Visual C++ で形式が 16 進数データに変更されないように、別 .RC のファイルに保持する必要があります。 .WAV MFC Advanced Concepts サンプル SPEAKN の (サウンド) ファイル リソースが適した例です。

[インクルード SECOND.RC の設定] ダイアログ ボックスのコンパイル時ディレクティブに含めることができます。

#include "res\myapp.rc2"  // non-Visual C++ edited resources
#include "second.rc"  // THE SECOND .RC FILE

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources

結果は次の図のようになります。

   RESOURCE.H     AFXRES.H
          \       /
           \     /
          MYAPP.RC
              |
              |
        RES\MYAPP.RC2
        SECOND.RC  
        AFXRES.RC
        AFXPRINT.RC

コンパイル時ディレクティブを使用すると、Visual C++で編集可能なリソースと編集可能でないリソースを複数.RCのファイルに整理できます。この場合、メインMYAPP.RCは他.RCのファイル以外#includeは何も行いません。 Visual Studio C++ プロジェクト .MAK ファイルを使用している場合は、含まれるすべてのリソースがアプリケーションと共にコンパイルされるように、メイン .RC ファイルをプロジェクトに含める必要があります。

編集できない Visual C++ ファイルの適用

AppWizard で作成された RES\MYAPP.RC2 ファイルは、誤って Visual C++ に読み込んでから、書式設定情報を失って書き戻したくないリソースを含むファイルの例です。 この問題から保護するには、ファイルの先頭に次の行を RES\MYAPP.RC2 配置します。

#ifdef APSTUDIO_INVOKED
    #error this file is not editable by Visual C++
#endif //APSTUDIO_INVOKED

Visual C++ は、ファイルを .RC コンパイルするときに、両方 APSTUDIO_INVOKED を定義します RC_INVOKED。 AppWizard によって作成されたファイル構造が破損していて、Visual C++ が上記の #error 行を読み取ると、致命的なエラーが報告され、ファイルの読み取りが .RC 中止されます。

複数の Visual C++編集ファイルで共有される .RC シンボルの管理

Visual C++ で個別に編集する複数 .RC のファイルにリソースを分割すると、次の 2 つの問題が発生します。

  • 複数 .RC のファイル間で同じシンボルを共有したい場合があります。

  • 個別のリソース (シンボル) に同じ ID 数値を割り当てることを避けるために、Visual C++ を支援する必要があります。

次の図は、最初の .RC 問題を処理する組織と .H ファイルを示しています。

              MYAPP.RC
             /         \
            /           \
MYSTRS.H   / MYSHARED.H  \  MYMENUS.H
     \    /    /      \   \    \
      \  /    /        \   \    \
      MYSTRS.RC         MYMENUS.RC

この例では、文字列リソースは 1 つのリソース ファイルに保持され、 MYSTRS.RCメニューは別 MYMENUS.RCのリソース ファイルに保持されます。 コマンドなどに対応する一部のシンボルは、2 つのファイル間で共有する必要が生じることがあります。 たとえば、ID_TOOLS_SPELLツール メニューの Spell 項目のメニュー コマンド ID を指定できます。また、アプリケーションのメイン ウィンドウのステータス バーにフレームワークによって表示されるコマンド プロンプトの文字列 ID である場合もあります。

シンボルは ID_TOOLS_SPELL 共有ヘッダー ファイル MYSHARED.Hに保持されます。 この共有ヘッダー ファイルメインテキスト エディターを使用して手動で含めます。Visual C++ では直接編集されません。 2 つのリソース ファイルMYSTRS.RCではMYMENUS.RC、前に説明したように、Resource Includes コマンドを使用して、読み取り専用ディレクティブMYAPP.RCで指定#include "MYSHARED.H"します。

リソースを識別するために使用する前に、共有するシンボルを予測するのが最も便利です。 共有ヘッダー ファイルにシンボルを追加し、ファイルの読み取り専用ディレクティブ .RC に共有ヘッダー ファイルをまだ含めていない場合は、シンボルを使用する前に追加します。 この方法でシンボルを共有することが予想されなかった場合は、シンボルの #define ステートメントを手動で (テキスト エディターを使用して) 移動する必要があります。たとえば、MYMENUS.Hシンボルを使用MYSTRS.RCする前にMYSHARED.H移動します。

複数 .RC のファイルでシンボルを管理する場合は、Visual C++ が個別のリソース (シンボル) に同じ ID 数値を割り当てないようにする必要もあります。 特定.RCのファイルに対して、Visual C++ は 4 つの ID のそれぞれに ID を増分割り当てますメイン。 編集セッションの間、Visual C++ は、ファイルのシンボル ヘッダー ファイル.RCの各 doメイン で割り当てられた最後の ID を追跡します。 空の (新しい) .RC ファイルのAPS_NEXT値を次に示します。

#define _APS_NEXT_RESOURCE_VALUE  101
#define _APS_NEXT_COMMAND_VALUE   40001
#define _APS_NEXT_CONTROL_VALUE   1000
#define _APS_NEXT_SYMED_VALUE     101

_APS_NEXT_RESOURCE_VALUE は、ダイアログ リソース、メニュー リソースなどを対象として使用する次のシンボル値です。 リソース シンボル値の有効な値の範囲は 1 ~ 0x6FFF です。

_APS_NEXT_COMMAND_VALUE は、コマンド ID を対象として使用する次のシンボル値です。 コマンド シンボル値の有効な値の範囲は 0x8000 ~ xDFFF です。

_APS_NEXT_CONTROL_VALUE は、ダイアログ コントロールを対象として使用する次のシンボル値です。 ダイアログ コントロール値の有効な値の範囲は 8 ~ 0xDFFF です。

_APS_NEXT_SYMED_VALUE は、シンボル ブラウザー内で [新規] コマンドを使用して手動でシンボル値を割り当てるときに発行される次のシンボル値です。

Visual C++ は、新しい .RC ファイルを作成するときに、少し大きい値から始まり、有効な値が最も低くなります。 AppWizard も、これらの値を、MFC アプリケーションに適切な値より少し大きい値に初期化します。 ID の値範囲の詳細については、テクニカル ノート 20 を参照してください。

これで、同じプロジェクト内であっても、新しいリソース ファイルを作成するたびに、Visual C++ は _APS_NEXT_ の同じ値を定義します。 つまり、たとえば、2 つの異なる .RC ファイルに複数のダイアログを追加すると、同じ #define 値が異なるダイアログに割り当てられる可能性が高くなります。 たとえば、IDD_MY_DLG1最初.RCのファイルには、2 番目.RCのファイルと同じ番号 101 IDD_MY_DLG2 が割り当てられている場合があります。

この問題を回避するには、それぞれの.RCファイル内の 4 つの doメイン ID ごとに個別の数値範囲を予約する必要があります。 リソースの追加を開始する前に、各ファイル_APS_NEXT値を.RC手動で更新して範囲を設定します。 たとえば、最初 .RC のファイルで既定値 _APS_NEXT が使用されている場合は、次 _APS_NEXT の値を 2 番目 .RC のファイルに割り当てることができます。

#define _APS_NEXT_RESOURCE_VALUE  2000
#define _APS_NEXT_COMMAND_VALUE   42000
#define _APS_NEXT_CONTROL_VALUE   2000
#define _APS_NEXT_SYMED_VALUE     2000

もちろん、Visual C++ が最初 .RC のファイルに非常に多くの ID を割り当てて、数値が 2 番目 .RC のファイル用に予約された ID と重なり合い始める可能性があります。 この競合が発生しないように、十分に大きな範囲を予約する必要があります。

.CPP、およびファイル間.RCの依存関係の.H管理

Visual C++ でファイルを .RC 保存すると、シンボルの変更も対応する RESOURCE.H ファイルに保存されます。 ファイル内.RC.CPPリソースを参照するファイルは、通常はプロジェクトの メイン ヘッダー ファイル内からファイルを含RESOURCE.Hめるために使用#includeする必要があります。 このインクルードは、ソース ファイルでヘッダーの依存関係をスキャンする開発環境の内部プロジェクト管理により、望ましくない副作用につながります。 Visual C++ で新しいシンボルを追加するたびに、ディレクティブを .CPP#include "RESOURCE.H" むすべてのファイルを再コンパイルする必要があります。

Visual C++ では、次のコメントをファイルの最初の行として含めることで、依存関係 RESOURCE.HRESOURCE.H 回避します。

//{{NO_DEPENDENCIES}}

開発環境では、依存.CPPファイルを再コンパイルする必要がないように、変更をRESOURCE.H無視してこのコメントを解釈します。

Visual C++ では、ファイルの //{{NO_DEPENDENCIES}} 保存時に常に .RC コメント行がファイルに追加されます。 場合によっては、ビルドの依存関係 RESOURCE.H を回避すると、リンク時に実行時エラーが検出されない可能性があります。 たとえば、シンボル ブラウザーを使用してリソースのシンボルに割り当てられている数値を変更した場合、リソースを参照するファイルが再コンパイルされていない場合 .CPP 、リソースは正しく見つかり、アプリケーションの実行時に読み込まれません。 このような場合は、シンボルの変更RESOURCE.Hの影響を受けることがわかっているファイルを.CPP明示的に再コンパイルするか、[すべてリビルド] を選択する必要があります。 特定のリソース グループのシンボル値を頻繁に変更する必要がある場合は、上記の「追加ヘッダー ファイルを含む」セクションで説明したように、これらのシンボルを別の読み取り専用ヘッダー ファイルに分割する方が便利で安全である可能性があります。

Visual C++ で Set Includes 情報を管理する方法

前述のように、[ファイル] メニューの [インクルード ファイルの設定] コマンドで 3 種類の情報を指定できます。

  • [シンボル用のヘッダー ファイル]

  • [読み取り専用ヘッダー ファイル]

  • [コンパイル時に追加するファイル]

次の表では、Visual C++ メインこの情報をファイルに.RC含める方法について説明します。 Visual C++ を使用するためにこの情報は必要ありませんが、Set Includes 機能をより自信を持って使用できるように理解が深められる場合があります。

上記の 3 種類の Set Includes 情報はそれぞれ、(1) リソース コンパイラで解釈できるディレクティブまたはその他のディレクティブ、および (2) #include Visual C++ でのみ解釈できる特別なTEXTINCLUDEリソースとして、2 つの形式でファイルに格納されます.RC

リソースのTEXTINCLUDE目的は、Set Include 情報を、Visual C++ の [含めるセット] ダイアログ ボックスですぐに表示できるフォームに安全に格納することです。 TEXTINCLUDE は、 Visual C++ によって定義されたリソースの種類 です。 Visual C++ は、リソース ID 番号が 1、2、3 の 3 つの特定 TEXTINCLUDE のリソースを認識します。

TEXTINCLUDE リソース ID [インクルード ファイルの設定] 情報の種類
1 [シンボル用のヘッダー ファイル]
2 [読み取り専用ヘッダー ファイル]
3 [コンパイル時に追加するファイル]

以下で説明するように、3 種類の Set Includes 情報のそれぞれを既定 MYAPP.RC で示し RESOURCE.H 、AppWizard によって作成されたファイルを示します。 RC 構文では、末尾が 0 の文字列とEND""二重引用符文字をそれぞれ指定するために、余分\0な文字列とブロック間BEGINのトークンが必要です。

[シンボル用のヘッダー ファイル]

リソース コンパイラによって解釈されるシンボル ヘッダー ファイル情報の形式は、単なる #include ステートメントです。

#include "resource.h"

対応する TEXTINCLUDE リソースは次のとおりです。

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END

[読み取り専用ヘッダー ファイル]

読み取り専用シンボル ディレクティブは、リソース コンパイラが解釈できる次の MYAPP.RC 形式の先頭に含まれています。

#include "afxres.h"

対応する TEXTINCLUDE リソースは次のとおりです。

2 TEXTINCLUDE DISCARDABLE
BEGIN
   "#include ""afxres.h""\r\n"
   "\0"
END

[コンパイル時に追加するファイル]

コンパイル時ディレクティブは、リソース コンパイラが解釈できる次の MYAPP.RC 形式の末尾に含まれています。

#ifndef APSTUDIO_INVOKED
///////////////////////
//
// From TEXTINCLUDE 3
//
#include "res\myapp.rc2"  // non-Visual C++ edited resources

#include "afxres.rc"  // Standard components
#include "afxprint.rc"  // printing/print preview resources
#endif  // not APSTUDIO_INVOKED

このディレクティブは #ifndef APSTUDIO_INVOKED 、コンパイル時ディレクティブをスキップするように Visual C++ に指示します。

対応する TEXTINCLUDE リソースは次のとおりです。

3 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""res\myapp.rc2""  // non-Visual C++ edited resources\r\n"
"\r\n"
"#include ""afxres.rc""  // Standard components\r\n"
"#include ""afxprint.rc""  // printing/print preview resources\r\n"
"\0"
END

関連項目

番号順テクニカル ノート
カテゴリ別テクニカル ノート