Share via


MFC モジュールの状態データの管理

ここでは、MFC モジュールの状態データについて説明すると共に、実行の流れ (実行時にコードがアプリケーション内をたどるパス) がモジュールに出入りするときにモジュールの状態がどのように更新されるかについて説明します。 さらに、AFX_MANAGE_STATE マクロと METHOD_PROLOGUE マクロでモジュール状態を切り替える方法についても説明します。

注意

"モジュール" とは、アプリケーションの他の部分から独立して動作するが、MFC DLL の共有コピーを使用する実行可能プログラム、DLL、DLL の集合のいずれかのことです。 モジュールの代表的な例は ActiveX コントロールです。

以下の図のように、MFC には、アプリケーション内のモジュールごとに状態データがあります。 この状態データの内容は、Windows インスタンス ハンドル (リソースの読み込み用)、アプリケーションの現在の CWinApp オブジェクトと CWinThread オブジェクトへのポインター、OLE モジュールの参照カウント、Windows オブジェクト ハンドルと MFC オブジェクトのインスタンス間の接続用の各種マップなどです。 ただし、複数のモジュールを使用するアプリケーションの場合は、各モジュールの状態データはアプリケーション全体の状態を表すものではありません。 モジュールごとに MFC の状態データのプライベート コピーを持っています。

単一モジュール (アプリケーション) の状態データ

単一モジュール アプリケーション状態データ

モジュールの状態データは構造体に含まれます。この構造体へのポインターを使用して、いつでもこのデータにアクセスできます。 以下の図のように、実行フローが特定のモジュールに入ったら、そのモジュールの状態を "現在の" つまり "有効" 状態にする必要があります。 したがって、各スレッド オブジェクトには、アプリケーションの有効状態を示す構造体へのポインターがあります。 このポインターを常に最新状態に保つことによって、アプリケーションのグローバル状態を管理し、各モジュールの状態の整合性を維持しています。 グローバル状態を正しく管理しないと、アプリケーションが予測不能な動作を起こします。

複数モジュールの状態データ

複数モジュール状態データ

つまり、各モジュールはそのすべてのエントリ ポイントにおいてモジュール状態を正しく切り替える必要があります。 "エントリ ポイント" とは、実行の流れがモジュールのコードに入る場所を指します。 以下のエントリ ポイントがあります。

参照

概念

MFC の一般的なトピック