Share via


Späte Bindung im Vergleich zum Vtable-Zugriff im ADSI-Erweiterungsmodell

Eine duale Schnittstelle ermöglicht direkten vtable-Zugriff auf alle zugehörigen Funktionen, während eine Dispatch-Schnittstelle dies nicht tut. Ein C/C++-Client kann einen Zeiger mit zwei Schnittstellen abfragen und den direkten vtable-Zugriff verwenden, um seine Funktionen aufzurufen. Dies ermöglicht einen schnelleren Zugriff als das Aufrufen der Funktion mithilfe der Funktionen IDispatch::GetIDsOfNames und IDispatch::Invoke . Dies gilt insbesondere für das Erweiterungsmodell, da alle dualen Schnittstellen in einem Erweiterungsobjekt zuerst ihre GetIDsOfNames - und Invoke-Funktionen zurück an den Aggregator (ADSI) delegieren müssen. Der Aggregator muss dann zusätzliche interne Schritte ausführen, um zu identifizieren, welches Erweiterungsobjekt, möglicherweise einschließlich des Aggregators selbst, Unterstützung für die aufgerufene Funktion bereitstellt und den Aufruf an das entsprechende Objekt umleiten.

Visual Basic ruft auch eine Dual-Interface-Funktion mithilfe des direkten Zugriffs auf eine vtable auf, wenn sie über einen Zeiger auf die Schnittstelle und Zugriff auf Typdaten aus der Typbibliothek verfügt. ADSI-Clients, die in Visual Basic geschrieben wurden, können explizit einen Zeiger auf eine duale Schnittstelle angeben, z. B. IADs, und somit vtable-Zugriff auf Funktionen in der Schnittstelle ermöglichen.

Dim inf as IADs
 
Set inf = GetObject("LDAP://CN=jeffsmith,DC=fabrikam,DC=com") ' An object that supports IADsDualInf.
inf.Get("name") 'IADs.Get() will be invoked through direct vtable access.

Da eine IDispatch-Schnittstelle den vtable-Zugriff nicht unterstützt, gilt dieses Beispiel nicht. Das heißt, eine Dispatchfunktion wird immer nur über die Funktionen IDispatch::GetIDsOfNames und IDispatch::Invoke aufgerufen.

Die aktuellen Versionen von VBScript und JScript unterstützen auch keinen vtable-Zugriff. Daher funktioniert eine duale Schnittstelle in einer VBScript- oder JScript-Umgebung wie eine Dispatch-Schnittstelle.