Enlace en tiempo de entrega frente a acceso de tabla virtual en el modelo de extensión ADSI
Una interfaz dual permite el acceso directo de la tabla virtual a todas sus funciones, mientras que una interfaz de distribución no lo hace. Un cliente de C/C++ puede consultar un puntero de interfaz dual y usar el acceso directo a vtable para invocar sus funciones. Esto proporciona un acceso más rápido que invocar la función mediante las funciones IDispatch::GetIDsOfNames e IDispatch::Invoke . Esto es especialmente cierto en el modelo de extensión, ya que todas las interfaces duales de un objeto de extensión deben delegar primero sus funciones GetIDsOfNames e Invoke en el agregador (ADSI). A continuación, el agregador debe realizar pasos internos adicionales para identificar qué objeto de extensión, posiblemente incluido el propio agregador, proporciona compatibilidad con la función llamada y redirigir la llamada al objeto adecuado.
Visual Basic también invoca una función de doble interfaz mediante el acceso directo a una tabla virtual, si tiene un puntero a la interfaz y acceso a los datos de tipo de la biblioteca de tipos. Los clientes ADSI escritos en Visual Basic pueden especificar un puntero a una interfaz dual, por ejemplo, iaDs, explícitamente y, por tanto, habilitar el acceso de la tabla virtual a las funciones de la interfaz.
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.
Dado que una interfaz IDispatch no admite el acceso de vtable, este ejemplo no se aplica. Es decir, una función de distribución siempre se invoca a través de las funciones IDispatch::GetIDsOfNames e IDispatch::Invoke .
Las versiones actuales de VBScript y JScript tampoco admiten el acceso a vtable. Por lo tanto, una interfaz dual en un entorno VBScript o JScript funciona como una interfaz de distribución.