次の方法で共有


TN035: Visual C++ での複数のリソース ファイルとヘッダー ファイルの使用

次のテクニカル ノートは、最初にオンライン ドキュメントに含まれてから更新されていません。 その結果、一部の手順やトピックが古くなっているか、正しくない可能性があります。 最新情報については、オンライン ドキュメント インデックスで関心のあるトピックを検索することをお勧めします。

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

  • プロジェクトを複数のリソース ファイルやヘッダー ファイルに分割するタイミングと、その方法

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

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

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

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

この注意事項は、上記の質問に次のように回答するように構成されています。

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

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

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

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

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

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

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

  • .RC.CPP、および.H ファイル間の依存関係を管理すると、リソース シンボル ファイルに依存するファイル.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++ では、リソース ファイルの名前 (MYAPP.RC など) に関係なく、対応するヘッダー ファイルに常にRESOURCE.H名前が付けられます。 Visual C++ の [リソースインクルード] ダイアログの [シンボル ヘッダー ファイル: ] セクションでは、このヘッダー ファイルの名前を変更できます。 セクションの編集ボックスに新しいファイル名を入力します。

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

Read-Only シンボル ディレクティブ

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

Compile-Time ディレクティブ

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

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

Visual C++ では、上記の 3 種類の Set Include 情報 (シンボル ヘッダー ファイル、Read-Only シンボル ディレクティブ、および Compile-Time ディレクティブ) が#include ディレクティブおよびTEXTINCLUDE リソースに.RCファイルに保存されます。 通常は対処する必要のない実装の詳細である TEXTINCLUDE リソースについては、「 Visual C++ でセットを管理する方法」に情報が含まれています

AppWizard によって作成された .RC.H ファイルの分析

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

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

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

Visual C++ File/Set Includes コマンドを使用して、これらの複数のファイル リレーションシップを表示できます。

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

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

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

AppWizard によって作成されたアプリケーションには、 RESOURCE.HAFXRES.Hの 2 つのヘッダー ファイルのみが含まれています。 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 コマンドを使用して、次のように、#include ステートメントを 2 番目の Read-Only Symbol ディレクティブとして指定することで、追加の読み取り専用ヘッダー ファイルを含めることができます。

#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 ファイル間、または同じプロジェクトの場合は、ヘッダー ファイルを共有できます。 これを行うには、上記の Read-Only ディレクティブ手法を両方の .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 ファイルに分割すると、リソースに対する変更の管理を細かく制御できます。

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

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

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

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

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

#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

Compile-Time ディレクティブを使用すると、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_INVOKEDRC_INVOKEDの両方を定義します。 AppWizard によって作成されたファイル構造が破損し、Visual C++ が上記の #error 行を読み取ると、致命的なエラーが報告され、 .RC ファイルの読み取りが中止されます。

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

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

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

  • Visual C++ が個別のリソース (シンボル) に同じ ID 数値を割り当てないようにする必要があります。

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

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

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

ID_TOOLS_SPELLシンボルは、共有ヘッダー ファイル (MYSHARED.H) に保持されます。 この共有ヘッダー ファイルは、テキスト エディターを使用して手動で管理します。Visual C++ では直接編集されません。 MYSTRS.RCMYMENUS.RCの 2 つのリソース ファイルでは、前述のように Resource Includes コマンドを使用して、MYAPP.RCの Read-Only ディレクティブで#include "MYSHARED.H"を指定します。

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

複数の .RC ファイルでシンボルを管理する場合は、Visual C++ が個別のリソース (シンボル) に同じ ID 数値を割り当てないようにする必要もあります。 指定された .RC ファイルに対して、Visual C++ は 4 つの ID ドメインのそれぞれに ID を増分割り当てます。 編集セッションの間、Visual C++ は、 .RC ファイルのシンボル ヘッダー ファイル内の各ドメインで割り当てられた最後の 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 は、コマンド識別に使用される次のシンボル値です。 コマンド シンボル値の有効な範囲は、0xDFFFに0x8000。

_APS_NEXT_CONTROL_VALUE は、ダイアログ コントロールに使用される次のシンボル値です。 ダイアログ コントロールのシンボル値の有効な範囲は 8 ~ 0xDFFFです。

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

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

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

この問題を回避するには、それぞれの .RC ファイル内の 4 つの ID ドメインごとに個別の数値範囲を予約する必要があります。 リソースの追加を開始するに、各.RC ファイルの_APS_NEXT値を手動で更新して範囲を設定します。 たとえば、最初の .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 と重複し始める可能性があります。 この競合が発生しないように、十分に大きな範囲を予約する必要があります。

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

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

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

//{{NO_DEPENDENCIES}}

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

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

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

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

  • シンボル ヘッダー ファイル

  • Read-Only シンボル ディレクティブ

  • Compile-Time ディレクティブ

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

上記の 3 種類の Set Includes 情報はそれぞれ、(1) リソース コンパイラで解釈できる#includeまたはその他のディレクティブとして、(2) 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 Read-Only シンボル ディレクティブ
3 Compile-Time ディレクティブ

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

シンボル ヘッダー ファイル

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

#include "resource.h"

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

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

Read-Only シンボル ディレクティブ

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

#include "afxres.h"

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

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

Compile-Time ディレクティブ

Compile-Time ディレクティブは、リソース コンパイラが解釈できる次の形式で 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 ディレクティブは、Compile-Time ディレクティブをスキップするように 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

こちらも参照ください

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