Liaison tardive ou accès aux tables virtuelles dans le modèle d’extension ADSI
Une interface double permet d’accéder directement aux tables virtuelles à toutes ses fonctions, contrairement à une interface de répartition. Un client C/C++ peut interroger un pointeur d’interface double et utiliser l’accès direct aux tables virtuelles pour appeler ses fonctions. Cela offre un accès plus rapide que l’appel de la fonction à l’aide des fonctions IDispatch::GetIDsOfNames et IDispatch::Invoke . Cela est particulièrement vrai dans le modèle d’extension, car toutes les interfaces doubles d’un objet d’extension doivent d’abord déléguer leurs fonctions GetIDsOfNames et Invoke à l’agrégateur (ADSI). L’agrégateur doit ensuite effectuer des étapes internes supplémentaires pour identifier l’objet d’extension, y compris éventuellement l’agrégateur lui-même, qui prend en charge la fonction appelée et redirige l’appel vers l’objet approprié.
Visual Basic appelle également une fonction double interface à l’aide d’un accès direct à une table virtuelle, s’il dispose d’un pointeur vers l’interface et d’un accès aux données de type à partir de la bibliothèque de types. Les clients ADSI écrits en Visual Basic peuvent spécifier explicitement un pointeur vers une interface double, par exemple des IAD, et ainsi activer l’accès de table virtuelle aux fonctions de l’interface.
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.
Étant donné qu’une interface IDispatch ne prend pas en charge l’accès aux tables virtuelles, cet exemple ne s’applique pas. Autrement dit, une fonction de répartition est toujours appelée via les fonctions IDispatch::GetIDsOfNames et IDispatch::Invoke uniquement.
Les versions actuelles de VBScript et de JScript ne prennent pas non plus en charge l’accès aux tables virtuelles. Par conséquent, une double interface dans un environnement VBScript ou JScript fonctionne comme une interface de répartition.