IDispatch - IDispatch

IDispatch это интерфейс что обнажает OLE автоматизация протокол.[1] Расширение IНеизвестно, это один из стандартных интерфейсов, который может быть предоставлен COM объекты. COM различает три типа интерфейса: обычай которые являются интерфейсами IUnknown на основе VTABLE, отправлять это интерфейсы IDispatch, поддерживающие самоанализ, и двойной интерфейсы, поддерживающие оба типа.

Интерфейс автоматизации (IDispatch) позволяет клиентскому приложению узнать, какие свойства и методы поддерживаются объектом во время выполнения, т. Е. Реализует концепцию RTTI. Он также предоставляет информацию, необходимую для вызова этих свойств и методов. Клиентским приложениям не нужно знать члены объекта при их компиляции. Это позволяет вызывать объекты COM и ActiveX с помощью платформ сценариев, таких как ASP сервер и JavaScript на Internet Explorer, где соглашения о вызовах не были известны в то время IIS или IE были построены. Напротив, простая библиотека объектов компилируется и связывается с программой, например вызов DLL должен знать имя функции и параметры во время компиляции.

Автор сценария может запросить у COM-объекта метод или свойство, о которых он уже знает из документации. Затем клиент может выполнить функцию с помощью Invoke, предоставляемого интерфейсом IDispatch, в форме позднее связывание. Такая возможность также была поддержана Динамический обмен данными (DDE), который так и не стал популярным из-за слишком низкого уровня.

Отправлять интерфейсы гибкие, но страдают от дополнительных затрат на самоанализ и вызовы по сравнению с обычай интерфейсы.[2] Поэтому часто рекомендуется поддерживать оба типа интерфейса с помощью двойной интерфейсы. Таким образом, клиенты, поддерживающие вызов на основе VTABLE, могут использовать обычай интерфейс вместо отправлять аналог.

Методы

Каждое свойство и метод, реализуемые объектом, поддерживающим интерфейс IDispatch, имеют так называемый идентификатор отправки, который часто сокращается до DISPID. DISPID является основным средством идентификации свойства или метода и должен быть передан в Вызвать функция для свойства или метода, который будет вызван, вместе с массивом Варианты содержащий параметры. В GetIDsOfNames функция может использоваться для получения соответствующего DISPID из имени свойства или метода, которое находится в нить формат.

IDispatch происходит от IНеизвестно и расширяет его четырьмя дополнительными методами:

интерфейс IDispatch : общественный IНеизвестно {  виртуальный HRESULT GetTypeInfoCount(беззнаковый int * pctinfo) = 0;  виртуальный HRESULT GetTypeInfo(беззнаковый int iTInfo,                              LCID lcid,                              ITypeInfo ** ppTInfo                             ) = 0;  виртуальный HRESULT GetIDsOfNames(REFIID рид,                                ОЛЕЧАР ** rgszNames,                                беззнаковый int cNames,                                LCID lcid,                                DISPID * rgDispId                               ) = 0;  виртуальный HRESULT Вызвать(DISPID dispIdMember,                         REFIID рид,                         LCID lcid,                         СЛОВО wFlags,                         DISPPARAMS * pDispParams,                         ВАРИАНТ * pVarResult,                         ИСКЛЮЧИТЕЛЬНО * pExcepInfo,                         беззнаковый int * puArgErr                        ) = 0;};

В IDispatch идентификатор интерфейса определяется как GUID со значением {00020400-0000-0000-C000-000000000046}.

Рекомендации

внешняя ссылка