Acessando interfaces em Apartments

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

  • Registrar uma interface como uma interface global (processwide).
  • Obtenha um ponteiro para essa interface de qualquer outro apartamento por meio de um cookie.
  • Revogue 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 Apartments dentro do processo, como variáveis de todo o processo e objetos Agile (objetos de thread livre, empacotados) que contêm ponteiros de interface para outros objetos.

Um objeto ágil não reconhece a infraestrutura COM subjacente na qual ele é executado; em outras palavras, o apartamento, o contexto e o thread em que ele está sendo executado. O objeto pode estar mantendo as interfaces específicas para um apartamento ou contexto. Por esse motivo, chamar essas interfaces a partir de onde o componente Agile está em execução 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 Agile está sendo executado.

Observação

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

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

Escolhendo o modelo de Threading

Apartments multithread

Problemas de Threading do servidor em processo

Processos, threads e Apartments

Comunicação de thread único e multithread

Apartments de thread único