Интерфейс IDispatch
Объекты автоматизации представляют собой СОМ-объекты, которые используют интерфейс IDispatch. Данный интерфейс описан в модуле system следующим образом:
type
IDispatch = interface (IUnknown)
[' {00020400-0000-0000-СООО-000000000046} ' ]
function GetTypelnfoCount(out Count: Integer): Integer; stdcall;
function GetTypelnfo(Index, LocalelD: Integer; out Typelnfo):Integer; stdcall;
function GetlDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocalelD: Integer; "
DispIDs: Pointer): Integer; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocalelD: Integer; Flags: Word;
var Params; VarResult, Exceptlnfo, ArgErr: Pointer): Integer;
end;
Основной функцией интерфейса IDispatch является метод invoke. Приложение-клиент может вызывать данный метод для выполнения определенных действий на сервере автоматизации. Для того чтобы указать, какой именно метод хочет вызвать клиент, он передает при вызове метода invoke параметр Displo. Этот параметр представляет собой число, которое называется идентификатор диспетчера (dispatch ID). Данное число указывает, какой именно метод должен исполняться на сервере. Следующий параметр метода invoke - параметр IID не используется. Параметр LocalelD содержит информацию о локализации. Параметр Flags указывает, как данный метод будет вызываться: для получения свойств, для установки свойств или обычным способом. Свойство Params содержит указатель на массив TDispparams. Данный массив хранит параметры, передаваемые методу. Параметр VarResult представляет собой указатель на olevariant, который содержит возвращаемое значение вызываемого метода (если такое имеется), а параметр Excepinfo - указатель на запись TExcepinfo, которая содержит информацию об ошибке, если метод invoke возвращает значение DISP_E_EXCEPTION. Последний параметр ArgError - это указатель на целое число, которое является индексом некорректного параметра в массиве Params. В данном случае метод invoke возвращает значение DISP_E_TYPEMISMATCH или DISP_E_PARAMNOTFOUND.
Следующий метод интерфейса invoke - метод GetlDsOfNames. Он применяется для получения идентификатора диспетчера, одного или нескольких методов по строкам имен этих методов. Параметр IID данного метода не используется. Параметр Names - это указатель на массив имен методов. Такой массив имеет тип PWideChar. Параметр NameCount содержит число, показывающее количество строк в массиве, на который указывает параметр Names. Параметр LocalelD содержит информацию о локализации. Параметр Displos - это указатель на массив целых чисел NameCount.
Метод GetTypelnfo применяется для получения информации о типе объектов автоматизации. Параметр index описывает получаемую информацию о типе и должен (обычно) быть равен нулю. Параметр LCID содержит ин формацию о локализации. Если метод выполнился успешно, то параметр Typeinfo будет содержать указатель iTypeinfo на информацию о типе объекта автоматизации.
Метод GetTypeinfoCount используется для получения числа интерфейсов информации о типе, поддерживаемых объектом автоматизации. Число возвращается в параметре count. Он может содержать два возможных значения: 0, если объект автоматизации не поддерживает информацию о типе, и 1, если поддерживает.