Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Поддержка технологий COM >> Автоматизация >> Интерфейс IDispatch

[Назад]    [Содержание ]    [Вперед]

  


Интерфейс IDispatch


Объекты автоматизации? это настоящие СОМ-объекты, которые реализуют интерфейс IDispatch. Интерфейс IDispatch описывается в модуле System следующим образом:

type
IDispatch = interface(IUnknown)
═════['{00020400-0000-0000-C000-000000000046}']
═════function GetTypeInfoCount(out Count: Integer): Integer; stdcall;
═════function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): Integer; stdcall;
═════function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID; Integer; DispIDs: Pointer): Integer; stdcall;
═════function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): Integer;
end;

Первoe, что вам необходимо запомнить, ? вовсе не обязательно иметь представление об интерфейсе IDispatch, чтобы воспользоваться преимуществами автоматизации в Delphi, кроме того, не стоит задумываться о сложности интерфейса. Строго говоря, вообще не следует работать с этим интерфейсом напрямую, поскольку Delphi предлагает весьма элегантное решение ? инкапсуляцию автоматизации. Описание интерфейса IDispatch в этом разделе предлагается только в качестве хорошей основы для понимания автоматизации.

Основной функцией интерфейса IDispatch является метод Invoke(). Когда клиент получает указатель IDispatch на сервер автоматизации, он может вызвать метод Invoke() для выполнения определенных методов на сервере. Параметр DispID этого метода содержит число, называемое идентификатор диспетчера (dispatch ID), который показывает, какой метод должен быть вызван на сервере. Параметр IID не используется. Параметр LocaleID содержит информацию о языке. Параметр Flags определяет, как этот метод будет вызван: как обычный либо для получения или установки свойств. Свойство Params содержит указатель на массив TDispParams, который содержит параметры, переданные этому методу. Параметр VarResult ? это указатель на OleVariant, который может содержать возвращаемое значение вызываемого метода. Параметр ExcepInfo является указателем на запись TExcepInfo, которая содержит информацию об ошибке, если метод Invoke() возвращает значение DISP_E_EXCEPTION. И наконец, если метод Invoke() возвращает значение DISP_E_TYPEMISMATCH или DISP_E_PARAMNOTFOUND, то параметр ArgError ? указатель на целое число ? будет содержать индекс некорректного параметра в массиве Params.

Метод GetIDsOfNames() интерфейса IDispatch вызывается для получения идентификатора диспетчера одного или нескольких методов по строкам имен этих методов. Параметр IID этого метода не используется, параметр Names указывает на массив имен методов типа PHideChar. Параметр NameCount содержит число строк в массиве Names. Параметр LocaleID содержит информацию о языке. Последний параметр, DispIDs, является указателем на массив целых чисел NameCount. Метод GetIDsOfNames() может заполнить этот массив идентификаторами диспетчеров методов, перечисленных в параметре Names.

Метод GetTypeInfo() возвращает информацию о типе объектов автоматизации (описываемую далее в этой главе). Параметр Index описывает получаемую информацию о типе и обычно должен быть равен 0; параметр LCID содержит информацию о языке. При успешном выполнении параметр TypeInfo будет содержать указатель ITypeInfo на информацию о типе объекта автоматизации.

Метод GetTypeInfoCount() возвращает число интерфейсов информации о типе, поддерживыемых объектом автоматизации, в параметре Count. Параметр Count может содержать только два возможных значения: 0, если объект автоматизации не поддерживает информацию о типе, и 1, если поддерживает.



[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017