ADSI 延伸模組模型中的晚期系結與 Vtable 存取
當分派介面沒有時,雙介面可直接存取其所有函式。 C/C++ 用戶端可以查詢雙重介面指標,並使用直接 vtable 存取來叫用其函式。 這比使用 IDispatch::GetIDsOfNames 和 IDispatch::Invoke 函式來叫用函式更快。 擴充模型中尤其如此,因為擴充物件中的所有雙重介面必須先將其 GetIDsOfNames 和 Invoke 函式委派回匯總工具 (ADSI)。 然後匯總工具必須執行額外的內部步驟,以識別哪些擴充物件,可能包括匯總工具本身、提供呼叫的函式支援,並將呼叫重新導向至適當的物件。
Visual Basic 也會使用直接存取 vtable 來叫用雙介面函式,如果具有介面的指標,以及從類型鏈接庫存取類型數據。 以 Visual Basic 撰寫的 ADSI 用戶端可以指定雙重介面的指標,例如 ,IAD,明確,從而啟用對接口中函式的可 Vtable 存取。
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.
由於 IDispatch 介面不支援 vtable 存取,因此此範例不適用。 也就是說,一律會透過IDispatch::GetIDsOfNames 和IDispatch::Invoke 函式叫用分派函式。
VBScript 和 JScript 的目前版本也不支援 vtable 存取。 因此,VBScript 或 JScript 環境中的雙重介面會像分派介面一樣執行。