IDispatch - IDispatch
Эта статья включает в себя список общих Рекомендации, но он остается в основном непроверенным, потому что ему не хватает соответствующих встроенные цитаты.Март 2010 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
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}.
Рекомендации
- ^ Microsoft MSDN: IDispatch интерфейс
- ^ Microsoft MSDN: Вопросы и ответы по ActiveX / COM, декабрь 1995 г.
внешняя ссылка
- DispHelper, Открытый исходный код библиотека для помощи в использовании IDispatch из C или C ++.
- IDispatchCodeGenerator, Генератор кода. Функция, которая добавляет IDispatch к объекту. Язык - C ++.