Duale Mehrfachschnittstellen
Sie können die Vorteile einer dualen Schnittstelle (d. h. die Flexibilität von vtable und später Bindung, also die Bereitstellung der Klasse für Skriptsprachen und C++) mit den Techniken der mehrfachen Vererbung kombinieren.
Obwohl es möglich ist, mehrere duale Schnittstellen für ein einzelnes COM-Objekt verfügbar zu machen, wird es nicht empfohlen. Wenn mehrere duale Schnittstellen vorhanden sind, darf nur eine IDispatch
Schnittstelle verfügbar gemacht werden. Die verfügbaren Techniken stellen sicher, dass dies der Fall ist, strafbar sind, wie z. B. Funktionsverlust oder erhöhte Codekomplexität. Der Entwickler, der diesen Ansatz in Betracht zieht, sollte die Vor- und Nachteile sorgfältig abwägen.
Verfügbarmachen einer einzelnen IDispatch-Schnittstelle
Es ist möglich, mehrere duale Schnittstellen für ein einzelnes Objekt verfügbar zu machen, indem sie von zwei oder mehr Spezialisierungen abgeleitet IDispatchImpl
werden. Wenn Sie clients jedoch erlauben, die IDispatch
Schnittstelle abzufragen, müssen Sie das COM_INTERFACE_ENTRY2 Makro (oder COM_INTERFACE_ENTRY_IID)) verwenden, um anzugeben, welche Basisklasse für die Implementierung von IDispatch
.
COM_INTERFACE_ENTRY2(IDispatch, IMyDualInterface)
Da nur eine IDispatch
Schnittstelle verfügbar gemacht wird, können Clients, die nur über die IDispatch
Schnittstelle auf Ihre Objekte zugreifen können, nicht auf die Methoden oder Eigenschaften in einer anderen Schnittstelle zugreifen.
Kombinieren mehrerer dualer Schnittstellen in einer einzigen Implementierung von IDispatch
ATL bietet keine Unterstützung für die Kombination mehrerer dualer Schnittstellen in einer einzigen Implementierung von IDispatch
. Es gibt jedoch mehrere bekannte Ansätze zum manuellen Kombinieren der Schnittstellen, z. B. das Erstellen einer Vorlagenklasse, die eine Vereinigung der separaten IDispatch
Schnittstellen enthält, das Erstellen eines neuen Objekts zum Ausführen der QueryInterface
Funktion oder die Verwendung einer typinfobasierten Implementierung geschachtelter Objekte zum Erstellen der IDispatch
Schnittstelle.
Diese Ansätze haben Probleme mit potenziellen Namespacekonflikten sowie Codekomplexität und Verwendbarkeit. Es wird nicht empfohlen, mehrere duale Schnittstellen zu erstellen.