次の方法で共有


コンパートメント

コンパートメントの種類

コンパートメントにはいくつかの異なるタイプがあります。 グローバル コンパートメントがあり、各スレッド マネージャー、ドキュメント マネージャー、コンテキストにはコンパートメントを含めることができます。

グローバル コンパートメントを使用すると、クライアントはプロセス間でデータを共有できます。 グローバル コンパートメント マネージャーを取得するには、 ITfThreadMgr::GetGlobalCompartment を呼び出します。

スレッド マネージャーには、スレッドごとにコンパートメントを含むコンパートメント マネージャーが含まれています。 これにより、スレッド内でデータを共有できます。 スレッド マネージャー コンパートメント マネージャーを取得するには、 ITfThreadMgr::QueryInterface with IID_ITfCompartmentMgrを呼び出します。

作成された各ドキュメント マネージャーには、コンパートメント マネージャーも含まれています。 これにより、特定のドキュメント マネージャー内でデータを共有できます。 ドキュメント マネージャー コンパートメント マネージャーを取得するには、 ITfDocumentMgr::QueryInterface with IID_ITfCompartmentMgrを呼び出します。

作成された各コンテキストには、コンパートメント マネージャーも含まれます。 これにより、特定のコンテキスト内でデータを共有できます。 コンテキスト コンパートメント マネージャーを取得するには、 ITfContext::QueryInterface with IID_ITfCompartmentMgrを呼び出します。

コンパートメントの作成と削除

コンパートメント GUID を使用して ITfCompartmentMgr::GetCompartment が初めて呼び出されるときに、コンパートメントが作成されます。 インストールするクライアントは、 ITfCompartment::SetValue を使用してコンパートメントの初期値を設定する必要があります。 値が設定されるまで、コンパートメント値は空です。 このため、 GetCompartment が呼び出される前にコンパートメントが存在したことを確認する方法はありません。 この状況を回避するために、インストールしているクライアントは、コンパートメントが既に存在するかどうかを他のクライアントが判断できるように、値を何らかの初期値に設定する必要があります。

コンパートメントを削除するには、 ITfCompartmentMgr::ClearCompartment メソッドを使用します。 コンパートメントへの既存の参照は無効としてマークされます。

コンパートメントの取得

ITfCompartmentMgr インターフェイスを使用して、クライアントは ITfCompartmentMgr::EnumCompartments を呼び出すことによってコンパートメントを列挙できます。 このメソッドは、インストールされているすべてのコンパートメントの GUID を含む IEnumGUID オブジェクトを提供します。

コンパートメント GUID を使用すると、特定のコンパートメントを取得するために ITfCompartmentMgr::GetCompartment が使用されます。 このメソッドは、コンパートメント データを取得および設定できる ITfCompartment オブジェクトを呼び出し元に提供します。

コンパートメント変更通知の受信

コンパートメントの値が変更されると、TSF マネージャーは、コンパートメントが変更されたことをインストール済みのアドバイス シンクに通知します。 コンパートメント変更アドバイズ シンクをインストールするには、 ITfCompartmentEventSink を実装するオブジェクトを作成します。 次に、ITfSource インターフェイスを取得するために、監視対象のコンパートメント オブジェクトにIID_ITfSourceを指定して ITfCompartment::QueryInterface を呼び出します。 次に、IID_ITfCompartmentEventSinkと ITfCompartmentEventSink オブジェクトへのポインターを使用して ITfSource::AdviseSink を呼び出します。 コンパートメントの値が変更されると、アドバイズ シンクの ITfCompartmentEventSink::OnChange がコンパートメントの GUID で呼び出されます。 アドバイズ シンクは ITfCompartment::GetValue を呼び出して新しい値を取得できます。

ITfCompartmentMgr

ITfCompartment

ITfCompartmentEventSink

TfClientId

ITfThreadMgr::GetGlobalCompartment

ITfCompartmentMgr::GetCompartment

ITfCompartment::SetValue

ITfCompartmentMgr::ClearCompartment

ITfCompartmentMgr::EnumCompartments

ITfSource

ITfSource::AdviseSink

ITfCompartmentEventSink::OnChange