Várias interfaces duplas

Talvez você queira combinar as vantagens de uma interface dupla (ou seja, a flexibilidade da associação tardia e vtable, disponibilizando assim a classe para linguagens de script, bem como C++) com as técnicas de herança múltipla.

Embora seja possível expor várias interfaces duplas em um único objeto COM, não é recomendado. Se houver várias interfaces duplas, apenas uma interface IDispatch deverá ser exposta. As técnicas disponíveis para garantir que isso aconteça trazem desvantagens, como perda de função ou maior complexidade do código. O desenvolvedor que esteja considerando essa abordagem deve pesar cuidadosamente as vantagens e desvantagens.

Expondo uma interface IDispatch única

É possível expor várias interfaces duplas em um único objeto derivando de duas ou mais especializações de IDispatchImpl. No entanto, se você permitir que os clientes consultem a interface IDispatch, precisará usar a macro COM_INTERFACE_ENTRY2 (ou COM_INTERFACE_ENTRY_IID) para especificar qual classe base usar para a implementação de IDispatch.

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

Como apenas uma interface IDispatch é exposta, os clientes que só podem acessar seus objetos por meio da interface IDispatch não poderão acessar os métodos ou propriedades em nenhuma outra interface.

Combinando várias interfaces duplas em uma única implementação de IDispatch

A ATL não fornece suporte para a combinação de várias interfaces duplas em uma única implementação de IDispatch. No entanto, há várias abordagens conhecidas para combinar manualmente as interfaces, como a criação de uma classe de modelo que contém uma união das interfaces IDispatch separadas, a criação de um objeto para executar a função QueryInterface ou o uso de uma implementação dos objetos aninhados baseada em typeinfo para criar a interface IDispatch.

Essas abordagens podem levar a problemas de colisão de namespace, bem como complexidade e manutenção do código. Não é recomendado criar várias interfaces duplas.

Confira também

Interfaces duplas e a ATL