Compartimentos
Tipos de compartimento
Há vários tipos diferentes de compartimentos. Há um compartimento global e cada gerenciador de threads, o gerenciador de documentos e o contexto podem conter um compartimento.
O compartimento global permite que os clientes compartilhem dados entre processos. Para obter o gerenciador de compartimento global, chame 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 em um thread. Para obter um gerenciador de compartimentos do gerenciador de threads, chame ITfThreadMgr::QueryInterface com IID_ITfCompartmentMgr.
Cada gerenciador de documentos criado também contém um gerenciador de compartimentos. Isso permite que os dados sejam compartilhados em um gerenciador de documentos específico. Para obter o gerenciador de compartimentos do gerenciador de documentos, chame ITfDocumentMgr::QueryInterface com IID_ITfCompartmentMgr.
Cada contexto criado também contém um gerenciador de compartimentos. Isso permite que os dados sejam compartilhados em 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 que 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. Por isso, não há como verificar se o compartimento existia antes de GetCompartment ser chamado. Para evitar essa situação, o cliente de instalação deve definir o valor como 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.
Obtendo compartimentos
Usando a interface ITfCompartmentMgr , um cliente pode enumerar compartimentos chamando ITfCompartmentMgr::EnumCompartments. Esse método fornece um objeto IEnumGUID que contém os GUIDs de todos os compartimentos instalados.
O uso do GUID do compartimento, ITfCompartmentMgr::GetCompartment é usado para obter um compartimento específico. Esse método fornece ao chamador um objeto ITfCompartment que pode obter e definir os dados do compartimento.
Recebendo notificações de alteração do compartimento
Quando o valor de um compartimento é alterado, o gerenciador do TSF notifica os coletores de aviso instalados de que o compartimento foi alterado. Para instalar um coletor de aviso de alteração de compartimento, crie um objeto que implemente ITfCompartmentEventSink. Em seguida, chame ITfCompartment::QueryInterface com IID_ITfSource no objeto de compartimento a ser monitorado para obter uma interface ITfSource . Agora chame ITfSource::AdviseSink com IID_ITfCompartmentEventSink e o ponteiro para o objeto ITfCompartmentEventSink . Quando o valor do compartimento é alterado, iTfCompartmentEventSink::OnChange é chamado com o GUID do compartimento. O coletor de consultoria pode chamar ITfCompartment::GetValue para obter o novo valor.
Tópicos relacionados