Acessando interfaces entre apartamentos

COM fornece uma maneira para qualquer apartamento em um processo para obter acesso a uma interface implementada em um objeto em qualquer outro apartamento no processo. Isso é feito através da interface IGlobalInterfaceTable . Essa interface tem três métodos, que permitem que você faça o seguinte:

  • Registre uma interface como uma interface global (processwide).
  • Obtenha um ponteiro para essa interface de qualquer outro apartamento através de um cookie.
  • Revogar o registro global de uma interface.

A interface IGlobalInterfaceTable é uma maneira eficiente para um processo armazenar um ponteiro de interface em um local de memória que pode ser acessado de vários apartamentos dentro do processo, como variáveis de todo o processo e objetos ágeis (objetos de thread livre, empacotados) contendo ponteiros de interface para outros objetos.

Um objeto ágil não está ciente da infraestrutura COM subjacente na qual ele é executado; em outras palavras, em que apartamento, contexto e thread ele está executando. O objeto pode estar segurando interfaces específicas de um apartamento ou contexto. Por esse motivo, chamar essas interfaces de onde quer que o componente ágil esteja sendo executado pode nem sempre funcionar corretamente. A tabela de interface global evita esse problema, garantindo que um proxy válido (ou ponteiro direto) para o objeto seja usado, com base em onde o objeto ágil está sendo executado.

Observação

A tabela de interface global não é portátil através dos limites do processo ou da máquina, portanto, não pode ser usada no lugar do mecanismo normal de passagem de parâmetros.

 

Para obter informações sobre como criar e usar uma tabela de interface global, consulte os seguintes tópicos:

Escolhendo o modelo de threading

Apartamentos Multithreaded

Problemas de threading do servidor em processo

Processos, threads e apartamentos

Comunicação Single-Threaded e Multithreaded

Apartamentos Single-Threaded