次の方法で共有


アクティブ化コンテキスト

アクティブ化コンテキスト は、特定の DLL バージョン、COM オブジェクト インスタンス、またはカスタム ウィンドウ バージョンを読み込むためにアプリケーションをリダイレクトするためにシステムが使用できる情報を含むメモリ内のデータ構造です。 アクティブ化コンテキストの 1 つのセクションには、DLL ローダーによって使用される DLL リダイレクト情報が含まれている場合があります。別のセクションに COM サーバー情報が含まれている場合があります。 アクティブ化コンテキスト関数は、アクティブ化コンテキストを使用、作成、アクティブ化、および非アクティブ化します。 アクティブ化関数は、特定の DLL バージョン、ウィンドウ クラス、COM サーバー、タイプ ライブラリ、およびインターフェイスを指定するバージョン名のオブジェクトにアプリケーションのバインドをリダイレクトできます。 アクティブ化コンテキストの関数と構造体の詳細については、「アクティブ化コンテキストリファレンス」を参照してください。

Windows XP 以降では、ライセンス認証コンテキスト関数を使用すると、Windows はバージョン名付きオブジェクトを作成 マニフェストの情報を使用できます。 アプリケーションが CreateProcess呼び出してプロセスを作成する場合、Windows は アプリケーション マニフェストの存在を確認します。 マニフェストが存在する場合、Windows はマニフェスト内の情報を使用してアクティブ化コンテキストを設定します。 マニフェストは、の side-by-side アセンブリ バージョンへのアプリケーションの依存を記述するため、マニフェスト内のバージョンなしで指定されたオブジェクトは、バージョン名付きオブジェクトにマップされます。 たとえば、マニフェストでは、DLL、ファイル、ウィンドウ クラス、COM サーバー、タイプ ライブラリ、インターフェイスを記述できます。

アクティブ化コンテキスト内でグローバル オブジェクトが作成されると、マニフェストを参照することで、オブジェクトにバージョン固有の名前が自動的に与わります。 アプリケーションは、名前付きオブジェクトを実行して要求すると、バージョン名付きオブジェクトを取得します。 これにより、コード モジュールの複数のバージョンをシステム上で同時に実行でき、相互に干渉しません。 たとえば、Windows シェル では、マニフェストを使用して、バージョン 6.0 のCOMCTL32への依存を記述し、ウィンドウ クラスのバージョンを作成します。

アプリケーションが CreateWindow呼び出してリソースを作成する場合、プロセスはその関数にクラス名を指定します。 GetCurrentActCtx の呼び出しは、現在のアクティブ化コンテキストを取得し、指定されたクラス名のマッピングが存在するかどうかを確認します。 マッピングが存在する場合は、そのバージョンの呼び出し元プロセスを使用してマッピングを解決し、バージョン固有のクラス名を指定します。 Windows では、そのクラス名とバージョンに関連付けられたウィンドウ プロシージャ、スタイル、およびその他の属性を含むウィンドウが作成されます。

アクティブ化コンテキストは、ほとんどの場合、システムによって管理されます。 アプリケーション開発者とアセンブリ プロバイダーは、通常、スタックを呼び出す必要はありません。 アプリケーションは、アクティブ化コンテキストを直接呼び出すことによって、アクティブ化コンテキストを管理できます。 詳細については、「アクティブ化コンテキスト API の使用」を参照してください。