Freigeben über


Multiple Dual Interfaces

Sie sollten die Vorteile einer dualen Schnittstelle (das heißt, die Flexibilität von der vtable und späte Bindung, die Klasse so zu so für Skriptsprachen und C++), mit der Mehrfachvererbung kombinieren.

Obwohl es möglich ist, mehrere duale Schnittstellen auf einem einzelnen COM-Objekt verfügbar zu machen, wird es nicht empfohlen. Wenn mehrere duale Schnittstellen vorhanden ist, muss es nur eine IDispatch verfügbar gemachte Schnittstelle geben. Die Techniken, die, sicherzustellen, dass verfügbar sind, dies der Fall ist, wenden Strafen wie Funktionsverlust oder verbesserte Codekomplexität. Der Entwickler, der diesen Ansatz betrachtet, sollte die Vor- und Nachteile sorgfältig abwägen.

Verfügbar machen einer einzelnen IDispatch-Schnittstelle

Es ist möglich, mehrere duale Schnittstellen auf einem einzelnen Objekt verfügbar zu machen, indem abgeleitet von zwei oder mehr Spezialisierungen von IDispatchImpl. Wenn Sie jedoch Clients zur Abfrage die IDispatch-Schnittstelle zulassen, müssen Sie das Makro COM_INTERFACE_ENTRY2 (oder) verwenden COM_INTERFACE_ENTRY_IID um anzugeben das für die Implementierung von IDispatch zu verwenden, die Basisklasse.

COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)

Da nur eine IDispatch-Schnittstelle verfügbar gemacht wird, sind Clients, die auf die Objekte über die IDispatch-Schnittstelle nur zugreifen können, nicht, Methoden oder Eigenschaften in einer anderen zuzugreifen herstellen.

Kombination mehrerer duale Schnittstellen in eine einzelne Implementierung von IDispatch

ATL bietet keine Unterstützung für die Kombination mehrerer duale Schnittstellen in eine einzelne Implementierung von IDispatch. Es gibt jedoch einige bekannte Ansätze zu Schnittstellen, die das Erstellen einer Vorlage gebildete Klasse manuell kombinieren, die Union der separaten IDispatch-Schnittstellen enthält, ein neues Objekt erstellt, um die QueryInterface-Funktion auszuführen, oder eine typeinfo-basierte Implementierung von geschachtelten Objekte, um die IDispatch-Schnittstelle erstellt.

Diese Vorgehensweisen haben Probleme mit möglichen Namespacekonflikten sowie Code Komplexität und Verwaltbarkeit. Es wird nicht empfohlen, mehrere duale Schnittstellen erstellen.

Siehe auch

Konzepte

Dual Interfaces and ATL