Обработка событий в модуле

Для того, чтобы модуль мог принимать события от ZuluGIS необходимо задать объект-приемник событий или процедуру обработки событий посредством вызова методов SetEventSink method (IPluginConnector) или SetEventCallback method (IPluginConnector) соединения IPluginConnector object.

Прием событий с помощью объекта-приемника

Метод SetEventSink принимает в качестве параметра COM-объект, поддерживающий интерфейс IDispatch (он же OLE Automation Object, он же ComVisible объект в .Net), который должен иметь метод OnZuluEvent следующего синтаксиса:

IDL:
[id(dispid)] HRESULT OnZuluEvent(long EventID, IUnknown* pSource, VARIANT Param1, VARIANT Param2, VARIANT Param3);
'Visual Basic:
Public Function OnZuluEvent(EventID As Long, Source As IUnknown, Param1, Param2, Param3) As Boolean

Прием событий с помощью процедуры обработки

Прием событий с помощью процедуры обработки возможен для плагинов, выполненных в виде подключаемой DLL с экспортируемыми функциями. Для плагинов в виде COM-объектов или элементов ActiveX рекомендуется использовать первый способ (с помощью объекта-приемника).

Параметром метода SetEventCallback является приведенный к типу long адрес функции вида:

BOOL __stdcall SomeProc(DWORD dwCookie, long EventID, IUnknown * pSource, VARIANT Param1, VARIANT Param2, VARIANT Param3);

Параметры события

Метод или процедура обработки события принимаю следующие параметры:

EventID Код события (см. набор eZuluEvents enum)
Source Объект-источник события (в зависимости от события). Это может быть объект Zulu Object, документ Document object, окно карты IMapView object или какой-либо другой объект, в зависимости от события.
Param1 - Param3 Дополнительные параметры (зависят от события)
dwCookie Передается в процедуру обработки события. Содержит значение, возвращаемое модулем в функции ConnectZuluPlugin в параметре lpdwCookie.

Отключение от приема событий

Для того, чтобы отключиться от приема событий от ZuluGIS необходимо повторно вызвать метод SetEventSink или SetEventCallback, передав в качестве параметра значение NULL.