Vinculação tardia versus acesso vtable no modelo de extensão ADSI
Uma interface dupla permite o acesso vtable direto a todas as suas funções, enquanto uma interface de despacho não. Um cliente C/C++ pode consultar um ponteiro de interface dupla e usar o acesso vtable direto para invocar suas funções. Isso fornece acesso mais rápido do que invocar a função usando as funções IDispatch::GetIDsOfNames e IDispatch::Invoke . Isso é especialmente verdadeiro no modelo de extensão, porque todas as interfaces duplas em um objeto de extensão devem delegar suas funções GetIDsOfNames e Invoke de volta ao agregador (ADSI) primeiro. O agregador, em seguida, deve executar etapas internas extras para identificar qual objeto de extensão, possivelmente incluindo o próprio agregador, fornece suporte para a função chamada e redireciona a chamada para o objeto apropriado.
Visual Basic também invoca uma função de interface dupla usando acesso direto a um vtable, se ele tiver um ponteiro para a interface e acesso a dados de tipo da biblioteca de tipos. Clientes ADSI escritos em Visual Basic podem especificar um ponteiro para uma interface dupla, por exemplo, IADs, explicitamente, e, assim, habilitar o acesso vtable a funções na 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.
Como uma interface IDispatch não oferece suporte ao acesso vtable, este exemplo não se aplica. Ou seja, uma função de despacho é sempre invocada por meio das funções IDispatch::GetIDsOfNames e IDispatch::Invoke somente.
As versões atuais do VBScript e JScript também não oferecem suporte ao acesso vtable. Portanto, uma interface dupla em um ambiente VBScript ou JScript funciona como uma interface de despacho.