Freigeben über


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

Siehe auch

Duale Schnittstellen und ATL