次の方法で共有


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 ライブラリに対しても有効になっています。

参照

参照

Activation Contexts

Application Manifests

Assembly Manifests

AfxWinInit

AfxGetStaticModuleState

AFX_MANAGE_STATE