次の方法で共有


MFC モジュール状態でのアクティベーション コンテキストのサポート

MFC では、ユーザー モジュールによって提供されるマニフェスト リソースを使用してアクティベーション コンテキストを作成します。 アクティベーション コンテキストの作成方法の詳細については、次のトピックを参照してください。

解説

これらの Windows SDK トピックを読むときは、MFC が Windows SDK Activation Context API を使用しない点を除いて、MFC アクティベーション コンテキストのメカニズムが Windows SDK アクティベーション コンテキストに似ていることに注意してください。

アクティベーション コンテキストは、MFC アプリケーション、ユーザー DLL、および MFC 拡張 DLL において次の方法で動作します。

  • MFC アプリケーションは、マニフェスト リソースに対してリソース ID 1 を使用します。 この場合、MFC は独自のアクティベーション コンテキストは作成せず、既定のアプリケーション コンテキストを使用します。

  • MFC ユーザー DLL は、マニフェスト リソースに対してリソース ID 2 を使用します。 ここでは、MFC はユーザー DLL ごとにアクティベーション コンテキストを作成するため、異なるユーザー DLL でも同じライブラリ (コモン コントロール ライブラリなど) の異なるバージョンを使用できます。

  • MFC 拡張 DLL は、ホスト アプリケーションまたはユーザー DLL を使用してアクティベーション コンテキストを確立します。

アクティベーション コンテキストの状態は、「Activation Context API の使用」で説明されているプロセスを使用して変更できますが、MFC アクティベーション コンテキストのメカニズムを使用すると、外部プラグインを個別に呼び出す前後に手動でアクティベーションの状態を切り替えることが難しいか不可能な DLL ベースのプラグイン アーキテクチャを開発する場合に便利です。

アクティベーション コンテキストは、AfxWinInit で作成されます。 これは、AFX_MODULE_STATE デストラクターで破棄されます。 アクティベーション コンテキスト ハンドルは、AFX_MODULE_STATE に保持されます (AFX_MODULE_STATE は「AfxGetStaticModuleState」で説明されています)。

AFX_MANAGE_STATE マクロはアクティベーション コンテキストをアクティブ化および非アクティブ化します。 AFX_MANAGE_STATE は、MFC DLL および静的な MFC ライブラリに対して有効化され、ユーザー DLL によって選択された適切なアクティベーション コンテキストで MFC コードを実行できるようになります。

関連項目

アクティベーション コンテキスト
アプリケーション マニフェスト
アセンブリ マニフェスト
AfxWinInit
AfxGetStaticModuleState
AFX_MANAGE_STATE