Erneutes Aufrufen von COM-Aggregationsregeln mit ADSI-Erweiterungen
Im Folgenden finden Sie eine kurze Übersicht über COM-Aggregations- und ADSI-Erweiterungsregeln.
Die CreateInstance-Methode gibt wie folgt einen Zeiger auf eine IUnknown-Schnittstelle zurück, die keine Funktionsaufrufe an den Aggregator delegiert.
Die IUnknown::QueryInterface-Methode gibt Zeiger auf die von ihr unterstützten Schnittstellen und Fehler für Schnittstellen zurück, die sie nicht unterstützt.
Die IUnknown::AddRef-Methode erhöht die Verweisanzahl für das aggregierte Erweiterungsobjekt selbst.
Die IUnkown::Release-Methode verringert die Verweisanzahl für das aggregierte Erweiterungsobjekt selbst und zerstört sich selbst, wenn die Verweisanzahl 0 ist.
Das Erweiterungsobjekt sollte den IUnknown-Zeiger des Aggregators speichern, z. B. m_pOuterUnknown, während der Implementierung der CreateInstance-Methode .
Alle Schnittstellen, die das Erweiterungsobjekt unterstützt, einschließlich IADsExtension, sollten von IUnknown erben, das alle Funktionsaufrufe zurück an den Aggregator delegiert.
- IUnknown::QueryInterface ruft "m_pOuterUnknown-QueryInterface>" auf.
- IUnknown::AddRef ruft "m_pOuterUnknown-AddRef>" auf.
- IUnkown::Release ruft "m_pOuterUnknown-Release>" auf
Erweiterungsautoren können jede interne Implementierung auswählen, die sie bevorzugen, solange sie den standardmäßigen COM-Aggregationsregeln entsprechen. Beachten Sie, dass ein Erweiterungsobjekt nicht als eigenständiges Objekt funktionieren muss. Erweiterungen sind so konzipiert, dass sie als Aggregate funktionieren. Eine Erweiterung kann jedoch so geschrieben werden, dass sie sowohl als eigenständiges Objekt als auch als Aggregat funktioniert.
Zusätzlich zur standardmäßigen COM-Aggregationsunterstützung kann ein Erweiterungsobjekt IADsExtension für erweiterte Features unterstützen. Wenn eine späte Bindung unterstützt wird, sollte die Erweiterung Folgendes ausführen:
- Delegieren von Funktionen für IDispatch zurück an den Aggregator.
- Implementieren Sie die IDispatch-Schnittstelle in IADsExtension.