Compartir a través de


Varias interfaces duales

Es posible que quiera combinar las ventajas de una interfaz dual (es decir, la flexibilidad de vtable y del enlace en tiempo de ejecución, lo que hace que la clase esté disponible para los lenguajes de scripting y también para C++) con las técnicas de la herencia múltiple.

Aunque es posible exponer varias interfaces duales en un solo objeto COM, no es recomendable hacerlo. Si hay varias interfaces duales, solo debe haber una interfaz IDispatch expuesta. Las técnicas disponibles para garantizar que este es el caso tienen inconvenientes, como la pérdida de función o un aumento de la complejidad del código. El desarrollador que esté pensando en aplicar este enfoque debe ponderar cuidadosamente sus ventajas y desventajas.

Exposición de una única interfaz IDispatch

Es posible exponer varias interfaces duales en un solo objeto derivando de dos o más especializaciones de IDispatchImpl. Sin embargo, si permite que los clientes consulten la interfaz IDispatch, deberá usar la macro COM_INTERFACE_ENTRY2 (o COM_INTERFACE_ENTRY_IID)) para especificar qué clase base se usará para la implementación de IDispatch.

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

Dado que solo se expone una interfaz IDispatch, los clientes que solo pueden acceder a los objetos a través de la interfaz IDispatch no podrán acceder a los métodos o propiedades de ninguna otra interfaz.

Combinación de varias interfaces duales en una sola implementación de IDispatch

ATL no proporciona ninguna compatibilidad para combinar varias interfaces duales en una sola implementación de IDispatch. Sin embargo, hay varios enfoques conocidos para combinar manualmente las interfaces, como la creación de una clase con plantilla que contiene una unión de las interfaces independientes de IDispatch, la creación de un nuevo objeto para realizar la función QueryInterface o el uso de una implementación basada en typeinfo de objetos anidados para crear la interfaz IDispatch.

Estos enfoques tienen problemas con las posibles colisiones de espacios de nombres, así como con la complejidad y el mantenimiento del código. No se recomienda la creación de varias interfaces duales.

Consulte también

Interfaces duales y ATL