Partilhar via


Compartimentos

Tipos de compartimento

Existem vários tipos diferentes de compartimentos. Há um compartimento global, e cada gerenciador de threads, gerenciador de documentos e contexto pode conter um compartimento.

O compartimento global permite que os clientes compartilhem dados entre processos. Para obter o gerenciador de compartimento global, ligue ITfThreadMgr::GetGlobalCompartment.

O gerenciador de threads contém um gerenciador de compartimentos que contém compartimentos por thread. Isso permite que os dados sejam compartilhados dentro de um thread. Para obter um gerenciador de compartimentos do gerenciador de threads, chame ITfThreadMgr::QueryInterface com IID_ITfCompartmentMgr.

Cada gestor de documentos criado também contém um gestor de compartimentos. Isso permite que os dados sejam compartilhados dentro de um gerenciador de documentos específico. Para obter o gerenciador de compartimentos do gerenciador de documentos, ligue ITfDocumentMgr::QueryInterface com IID_ITfCompartmentMgr.

Cada contexto criado também contém um gerenciador de compartimentos. Isso permite que os dados sejam compartilhados dentro de um contexto específico. Para obter um gerenciador de compartimento de contexto, chame ITfContext::QueryInterface com IID_ITfCompartmentMgr.

Criando e excluindo um compartimento

Um compartimento é criado na primeira vez ITfCompartmentMgr::GetCompartment é chamado com o GUID do compartimento. O cliente de instalação deve definir o valor inicial do compartimento usando ITfCompartment::SetValue. Até que um valor seja definido, o valor do compartimento estará vazio. Devido a isso, não há como verificar se o compartimento existia antes de GetCompartment foi chamado. Para evitar essa situação, o cliente de instalação deve definir o valor para algum valor inicial para que outros clientes possam determinar se o compartimento já existe.

O método ITfCompartmentMgr::ClearCompartment é usado para remover um compartimento. Todas as referências existentes ao compartimento são marcadas como inválidas.

Obtenção de compartimentos

Usando o interface ITfCompartmentMgr, um cliente pode enumerar compartimentos chamando ITfCompartmentMgr::EnumCompartments. Esse método fornece um IEnumGUID objeto que contém os GUIDs de todos os compartimentos instalados.

Usando o GUID do compartimento, ITfCompartmentMgr::GetCompartment é usado para obter um compartimento específico. Esse método fornece ao chamador um ITfCompartment objeto que pode obter e definir os dados do compartimento.

Receber notificações de alteração de compartimento

Quando o valor de um compartimento muda, o gestor da TSF notifica todos os sumidouros instalados de que o compartimento mudou. Para instalar um dissipador de aviso de mudança de compartimento, crie um objeto que implemente ITfCompartmentEventSink. Em seguida, chame ITfCompartment::QueryInterface com IID_ITfSource no objeto compartimento a ser monitorado para obter uma interfaceITfSource. Agora chame ITfSource::AdviseSink com IID_ITfCompartmentEventSink e o ponteiro para o ITfCompartmentEventSink objeto. Quando o valor do compartimento muda, o do coletor de aviso ITfCompartmentEventSink::OnChange é chamado com o GUID do compartimento. O coletor de aconselhamento pode chamar ITfCompartment::GetValue para obter o novo valor.

ITfCompartmentMgr

ITfCompartment

ITfCompartmentEventSink

TfClientId

ITfThreadMgr::GetGlobalCompartment

ITfCompartmentMgr::GetCompartment

ITfCompartment::SetValue

ITfCompartmentMgr::ClearCompartment

ITfCompartmentMgr::EnumCompartments

ITfSource

ITfSource::AdviseSink

ITfCompartmentEventSink::OnChange