Sdílet prostřednictvím


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í.

Viz také

Duální rozhraní a ATL