Condividi tramite


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

Un'interfaccia duale consente l'accesso diretto di vtable a tutte le relative funzioni, mentre un'interfaccia dispatch non lo fa. Un client C/C++ può eseguire query per un puntatore a doppia interfaccia e usare l'accesso diretto alla vtable per richiamare le funzioni. Ciò consente un accesso più rapido rispetto alla chiamata della funzione usando le funzioni IDispatch::GetIDsOfNames e IDispatch::Invoke. Ciò vale soprattutto nel modello di estensione, perché tutte le interfacce duali 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 tabella virtuale, se ha un puntatore all'interfaccia e l'accesso ai dati di tipo dalla libreria dei tipi. I client ADSI scritti in Visual Basic possono specificare un puntatore a un'interfaccia doppia, ad esempio ID, in modo esplicito e quindi abilitare l'accesso alla tabella virtuale 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. Ovvero, 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, una doppia interfaccia in un ambiente VBScript o JScript esegue come un'interfaccia dispatch.