Interfacce duali multiple
È possibile combinare i vantaggi di un'interfaccia doppia ( ovvero la flessibilità del binding sia della tabella virtuale che del binding tardivo, rendendo quindi la classe disponibile per i linguaggi di scripting e C++) con le tecniche di ereditarietà multipla.
Sebbene sia possibile esporre più interfacce duali su un singolo oggetto COM, non è consigliabile. Se sono presenti più interfacce duali, deve essere esposta una IDispatch
sola interfaccia. Le tecniche disponibili per garantire che questo sia il caso comportano sanzioni come la perdita di funzione o una maggiore complessità del codice. Lo sviluppatore che prende in considerazione questo approccio deve valutare attentamente i vantaggi e gli svantaggi.
Esposizione di una singola interfaccia IDispatch
È possibile esporre più interfacce duali su un singolo oggetto derivando da due o più specializzazioni di IDispatchImpl
. Tuttavia, se si consente ai client di eseguire query per l'interfaccia IDispatch
, sarà necessario usare la macro COM_INTERFACE_ENTRY2 (o COM_INTERFACE_ENTRY_IID)) per specificare la classe di base da usare per l'implementazione di IDispatch
.
COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)
Poiché viene esposta una IDispatch
sola interfaccia, i client che possono accedere solo agli oggetti tramite l'interfaccia IDispatch
non potranno accedere ai metodi o alle proprietà in qualsiasi altra interfaccia.
Combinazione di più interfacce duali in una singola implementazione di IDispatch
ATL non fornisce alcun supporto per la combinazione di più interfacce duali in una singola implementazione di IDispatch
. Esistono tuttavia diversi approcci noti per combinare manualmente le interfacce, ad esempio la creazione di una classe basata su modelli che contiene un'unione delle interfacce separate IDispatch
, la creazione di un nuovo oggetto per eseguire la QueryInterface
funzione o l'uso di un'implementazione basata su typeinfo di oggetti annidati per creare l'interfaccia IDispatch
.
Questi approcci presentano problemi con potenziali conflitti di spazio dei nomi, nonché complessità e manutenibilità del codice. Non è consigliabile creare più interfacce duali.