MFC モジュール状態でのアクティベーション コンテキストのサポート
更新 : 2007 年 11 月
MFC は、ユーザー モジュールによって提供されるマニフェスト リソースを使用してアクティベーション コンテキストを作成します。アクティベーション コンテキストが作成される方法の詳細については、次のトピックを参照してください。
解説
これらの Windows SDK に関するトピックを読む際、MFC アクティベーション コンテキストのメカニズムは Windows SDK のアクティベーション コンテキストとほぼ同じですが、MFC は Windows SDK のアクティベーション コンテキスト API を使用しないということに注意してください。
MFC のアプリケーション、ユーザー DLL、および拡張 DLL で、アクティベーション コンテキストは次のように動作します。
MFC アプリケーションは、自身のマニフェスト リソースに対してリソース ID 1 を使用します。この場合、MFC は独自のアクティベーション コンテキストは作成せず、既定のアプリケーション コンテキストを使用します。
MFC ユーザー DLL は、自身のマニフェスト リソースに対してリソース ID 2 を使用します。ここでは、MFC は各ユーザー DLL に対してアクティベーション コンテキストを作成するので、ユーザー DLL ごとに、同じライブラリ (たとえば、コモン コントロール ライブラリ) の別のバージョンを使用できます。
MFC 拡張子 DLL は、アクティベーション コンテキストを作成するのに、ホストのアプリケーションまたはユーザー DLL に依存します。
アクティベーション コンテキストの状態は、「Using the Activation Context API」に記述されている手順に従って変更することもできますが、MFC アクティベーション コンテキストのメカニズムは、外部プラグイン呼び出しの前後にアクティベーション状態を手動で切り替えるのが困難 (または不可能) な、DLL ベースのプラグイン アーキテクチャを開発するのに向いています。
アクティベーション コンテキストは AfxWinInit で作成されます。破棄は AFX_MODULE_STATE デストラクタで行われます。アクティベーション コンテキスト ハンドルは AFX_MODULE_STATE 内に保持されます(AFX_MODULE_STATE については AfxGetStaticModuleState に解説されています)。
AFX_MANAGE_STATE マクロが、アクティベーション コンテキストをアクティブにしたり非アクティブにしたりします。Visual C++ 2005 の時点で、AFX_MANAGE_STATE の動作は変更され、ユーザー DLL によって選択された適切なアクティベーション コンテキストで MFC コードを実行できるように、MFC DLL だけでなく静的な MFC ライブラリに対しても有効になっています。