На этом шаге мы рассмотрим двойные интерфейсы.
Наиболее предпочтительно реализовать диспетчерский интерфейс в виде двойного интерфейса (dual interface). В нем все методы Invoke() доступны напрямую - как записи таблицы vtable. На рисунке 1 показана возможная реализация двойного интерфейса: адреса методов IEncode одновременно включаются как в vtable, так и в справочную таблицу функции Invoke().
Рис.1. Реализация двойного интерфейса
При наличии двойного интерфейса параметры и методы, предоставляемые компонентом, остаются доступными через диспетчерский интерфейс с помощью языков типа VBScript, а языки типа C++ могут обращаться к ним напрямую через vtable. В Visual Basic доступны как диспетчерский интерфейс, так и vtable. Двойной интерфейс позволяет клиентам, способным обращаться к vtable, быстрее запрашивать методы, при этом он еще и поддерживает клиентов, нуждающихся в диспетчерском интерфейсе.
Со следующего шага мы начнем знакомиться с потоковыми моделями.