Введение

IDispatch – это интерфейс, который предоставляет доступ к протоколу автоматизации OLE. Расширяя IUnknown, он является одним из стандартных интерфейсов, которые могут быть реализованы COM-объектами. COM различает три типа интерфейсов: пользовательские, основанные на VTABLE и реализующие IUnknown, диспетчерские, реализующие IDispatch и поддерживающие интроспекцию, и двойные, поддерживающие оба типа. Интерфейс автоматизации (IDispatch) позволяет клиентскому приложению динамически определять, какие свойства и методы поддерживает объект во время выполнения, то есть реализует концепцию RTTI. Он также предоставляет информацию, необходимую для вызова этих свойств и методов. Клиентским приложениям не требуется знать члены объекта на этапе компиляции. Это позволяет COM- и ActiveX-объектам вызываться из скриптовых сред, таких как сервер ASP и JavaScript в Internet Explorer, где соглашения о вызовах были неизвестны на момент разработки IIS или IE. В отличие от этого, простая библиотека объектов компилируется и связывается с программой, например, для вызова DLL необходимо знать имя функции и параметры во время компиляции. Скриптовый разработчик может запросить у COM-объекта метод или свойство, о котором он уже знает из документации. Затем клиент может выполнить функцию с помощью Invoke, предоставляемого интерфейсом IDispatch, что является формой позднего связывания. Аналогичные возможности поддерживались и Dynamic Data Exchange (DDE), но он не получил широкого распространения из-за своей сложности и низкоуровневости. Диспетчерские интерфейсы обладают гибкостью, но имеют дополнительную нагрузку, связанную с интроспекцией и вызовом, по сравнению с пользовательскими интерфейсами. Поэтому часто целесообразно поддерживать оба типа интерфейсов с помощью двойных интерфейсов. Это позволяет клиентам, поддерживающим вызов на основе VTABLE, использовать пользовательский интерфейс вместо диспетчерского.