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:
Tópicos relacionados