Associazione tardiva e accesso alla tabella Vtable nel modello di estensione ADSI

Un'interfaccia doppia consente l'accesso diretto alla vtable a tutte le relative funzioni, mentre non è disponibile un'interfaccia dispatch. Un client C/C++ può eseguire una query per un puntatore a interfaccia doppia e usare l'accesso diretto alla vtable per richiamare le relative funzioni. Ciò consente un accesso più rapido rispetto alla chiamata della funzione tramite le funzioni IDispatch::GetIDsOfNames e IDispatch::Invoke . Ciò vale soprattutto nel modello di estensione, perché tutte le interfacce doppie in un oggetto di estensione devono delegare prima le funzioni GetIDsOfNames e Invoke all'aggregatore (ADSI). L'aggregatore deve quindi eseguire passaggi interni aggiuntivi per identificare l'oggetto di estensione, eventualmente incluso l'aggregatore stesso, fornisce il supporto per la funzione chiamata e reindirizzare la chiamata all'oggetto appropriato.

Visual Basic richiama anche una funzione a doppia interfaccia usando l'accesso diretto a una vtable, se ha un puntatore all'interfaccia e l'accesso ai dati dei tipi dalla libreria dei tipi. I client ADSI scritti in Visual Basic possono specificare un puntatore a un'interfaccia doppia, ad esempio ID ID, in modo esplicito e quindi abilitare l'accesso vtable alle funzioni nell'interfaccia.

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.

Poiché un'interfaccia IDispatch non supporta l'accesso alla tabella virtuale, questo esempio non si applica. Vale a dire, una funzione dispatch viene sempre richiamata tramite le funzioni IDispatch::GetIDsOfNames e IDispatch::Invoke .

Anche le versioni correnti di VBScript e JScript non supportano l'accesso alla tabella virtuale. Pertanto, un'interfaccia doppia in un ambiente VBScript o JScript esegue come un'interfaccia dispatch.