Více duálních rozhraní
Můžete zkombinovat výhody duálního rozhraní (to znamená flexibilitu virtuální tabulky i pozdní vazby, čímž třídu zpřístupníte skriptovacím jazykům i C++) s technikami vícenásobné dědičnosti.
I když je možné zveřejnit více duálních rozhraní na jednom objektu COM, nedoporučuje se. Pokud existuje více duálních rozhraní, musí být vystaveno pouze jedno IDispatch
rozhraní. Dostupné techniky, které zajistí, že se jedná o případ, mají sankce, jako je ztráta funkce nebo zvýšení složitosti kódu. Vývojář, který uvažuje o tomto přístupu, by měl pečlivě zvážit výhody a nevýhody.
Zveřejnění jednoho rozhraní IDispatch
Je možné zveřejnit více duálních rozhraní na jednom objektu odvozením ze dvou nebo více specializace .IDispatchImpl
Pokud však klientům povolíte dotazování na IDispatch
rozhraní, budete muset použít makro COM_INTERFACE_ENTRY2 (nebo COM_INTERFACE_ENTRY_IID)), abyste určili, která základní třída se má použít pro implementaci IDispatch
.
COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)
Protože je vystaveno pouze jedno IDispatch
rozhraní, klienti, kteří mají přístup pouze k vašim objektům prostřednictvím IDispatch
rozhraní, nebudou mít přístup k metodám nebo vlastnostem v žádném jiném rozhraní.
Kombinování více duálních rozhraní do jedné implementace IDispatch
ATL neposkytuje žádnou podporu pro kombinování více duálních rozhraní do jediné implementace IDispatch
. Existuje však několik známých přístupů k ručnímu kombinování rozhraní, jako je například vytvoření šablonované třídy, která obsahuje sjednocení samostatných IDispatch
rozhraní, vytvoření nového objektu QueryInterface
pro provedení funkce nebo použití implementace založené na typeinfo vnořených objektů k vytvoření IDispatch
rozhraní.
Tyto přístupy mají problémy s potenciálními kolizemi oborů názvů a složitostí kódu a udržovatelností. Nedoporučuje se vytvářet více duálních rozhraní.