Udostępnij za pośrednictwem


Wiele podwójnych interfejsów

Warto połączyć zalety podwójnego interfejsu (czyli elastyczność zarówno w przypadku tworzenia tabel wirtualnych, jak i późnego powiązania, dzięki czemu klasa jest dostępna dla języków skryptowych, a także języka C++) przy użyciu technik wielokrotnego dziedziczenia.

Chociaż istnieje możliwość uwidocznienia wielu podwójnych interfejsów na jednym obiekcie COM, nie jest to zalecane. Jeśli istnieje wiele podwójnych interfejsów, musi być uwidoczniony tylko jeden IDispatch interfejs. Dostępne techniki w celu zapewnienia, że jest to przypadek, niosą kary, takie jak utrata funkcji lub zwiększona złożoność kodu. Deweloper rozważający to podejście powinien dokładnie rozważyć zalety i wady.

Uwidacznianie pojedynczego interfejsu IDispatch

Istnieje możliwość uwidocznienia wielu podwójnych interfejsów na jednym obiekcie przez wyprowadzenie z dwóch lub większej IDispatchImplliczby specjalizacji programu . Jeśli jednak zezwolisz klientom na wykonywanie zapytań dotyczących interfejsu IDispatch , musisz użyć makra COM_INTERFACE_ENTRY2 (lub COM_INTERFACE_ENTRY_IID)), aby określić, która klasa bazowa ma być używana do implementacji IDispatchprogramu .

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

Ponieważ uwidoczniony jest tylko jeden IDispatch interfejs, klienci, którzy mogą uzyskiwać dostęp tylko do obiektów za pośrednictwem interfejsu IDispatch , nie będą mogli uzyskać dostępu do metod ani właściwości w żadnym innym interfejsie.

Łączenie wielu podwójnych interfejsów w jedną implementację interfejsu IDispatch

ATL nie zapewnia żadnej obsługi łączenia wielu podwójnych interfejsów w jedną implementację programu IDispatch. Istnieje jednak kilka znanych metod ręcznego łączenia interfejsów, takich jak utworzenie klasy szablonowej zawierającej związek oddzielnych IDispatch interfejsów, utworzenie nowego obiektu do wykonania QueryInterface funkcji lub użycie implementacji opartej na typinfo obiektów zagnieżdżonych w celu utworzenia interfejsu IDispatch .

Te podejścia mają problemy z potencjalnymi kolizjami przestrzeni nazw, a także złożonością kodu i możliwościami konserwacji. Nie zaleca się tworzenia wielu podwójnych interfejsów.

Zobacz też

Podwójne interfejsy i ATL