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 IDispatchImpl
liczby 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 IDispatch
programu .
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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla