Для создания mdl-файла необходимо использовать два класса:

  1. NissObjectDLLExt. Все объекты наследуются от этого класса с переопределением его виртуальных методов.
  2. CoreInterface. Методы класса используются для получения  параметров объектов системы.

Объявленные классы и методы содержатся в заголовочном файле nissdlle.h. Код, содержащийся в файле nissdlle.h, представлен в разделе ПРИЛОЖЕНИЕ 2. Объявление классов NissObjectDLLExt и CoreInterface.

Примечание.

Под методами класса подразумеваются процедуры и функции, объявленные в теле класса.

Описание методов класса NissObjectDLLExt приведено в таблице.

Метод

Описание

Пример

CoreInterface* m_pCore

Указатель на интерфейс ядра

 

virtual BOOL IsWantAllEvents()

Возвращает TRUE, если необходимо в функции OnEvent получать события от всех объектов, FALSE - если только от своего объекта.

если указать “CAM,GRABBER”, то при изменении настроек этих объектов для объекта DEMO придут сообщения:

 

DEMO|1|UPDATE_CAM|параметры камеры

 

DEMO|1|UPDATE_GRABBER|параметры устройства видеоввода

virtual CString DescribeSubscribeObjectsList()

Через запятую указываются типы объектов, при изменении которых происходит уведомление текущего объекта

virtual CString GetObjectType()

Возвращает тип объекта

virtual CString GetObjectType() 

{ return "DEMO"; }

virtual CString GetParentType()

Возвращает тип родительского объекта

virtual CString GetParentType() 

{ return "SLAVE"; }

virtual int GetPos()

Возвращает позицию объекта в ключевом файле “intellect.sec”.

Внимание! Этот параметр должен быть согласован с компанией «Ай Ти Ви групп»

virtual int GetPos() 

{ return -1; }

 

Примечание. При запуске ПК Интеллект в демо-режиме функция возвращает -1

virtual CString GetPort()

Возвращает номер порта, через который будет происходить соединение и обмен сообщениями между объектом и ядром

Внимание! Этот параметр должен быть согласован с компанией «Ай Ти Ви групп»

virtual CString GetPort()

{ return "1100"; }

virtual CString GetProcessName()

Возвращает имя процесса. Используется ядром для поиска и автоматического запуска исполнительного модуля при старте системы и инициализации модуля

virtual CString GetProcessName()

{ return "demo"; }

virtual CString GetDeviceType()

Определяет тип объекта и характер его поведения.

 

ACD – объект этого типа получает все события, связанные с созданием, изменением и удалением следующих объектов: Пользователи, Временная зона и Уровни доступа

 

ACD2– тип аналогичный ACD с дополнительной (обеспеченной ядром) возможностью автоматически удалять временные (с ограниченным сроком действия) карточки

 

Тип ACR указывает на то, что объект является считывателем 

 

Все объекты типа ACR доступны в раскрывающемся списке Точка прохода

virtual BOOL HasChild()

Возвращает TRUE, если у объекта есть дочерние объекты, иначе – FALSE

virtual BOOL HasChild()

{ return TRUE; }

virtual UINT HasSetupPanel()

Если у объекта имеется панель настроек, метод возвращает TRUE, иначе – FALSE

virtual UINT HasSetupPanel()

{ return TRUE; }

virtual void OnPanelInit(CWnd*)

Используется при инициализации панели настроек объекта. В качестве параметра передается указатель на окно панели настроек

 

virtual void OnPanelLoad(CWnd*,Msg&)

Используется при загрузке панели настроек для получения параметров объекта. В качестве параметра метода передается указатель на окно панели настроек и ссылка на сообщение, через которое осуществляется передача параметров объекта, и заполнение ими необходимых полей в панели настроек

virtual void OnPanelLoad(CWnd* pwnd,Msg& params)

{

CString s;

s = arams.GetParam("port");

pwnd->GetDlgItem(IDC_PORT)-> SetWindowText(s);

}     

    

virtual void OnPanelSave(CWnd*,Msg&)

Используется при выгрузке панели настроек для сохранения параметров объекта. В качестве параметра метода передается указатель на окно панели настроек и ссылка на сообщение, через которое осуществляется передача параметров объекта и сохранение их в БД

virtual void OnPanelSave(CWnd* pwnd,Msg& params)

{

CString s;

pwnd-> GetDlgItem(IDC_PORT)-> GetWindowText(s);

params.SetParam("port",s);

}

virtual void OnPanelExit(CWnd*)

Используется при закрытии панели настроек объекта. В качестве параметра передается указатель на окно панели настроек

 

virtual void OnPanelButtonPressed(CWnd*,UINT)

Предназначен для обработки нажатий кнопок на панели настроек объекта. В качестве параметра передается указатель на окно панели настроек и идентификатор кнопки.

Примечание. Числовые значения идентификаторов кнопок должны начинаться с номера 1151. Например, для кнопки Test идентификатор в файле Resource.h определяется как:

#define IDC_TEST 1151

 

Virtual void OnPanelButtonPressed (CWnd* pwnd,UINT id)

{

if(id==IDC_TEST)

{ React react("DEMO",Id,"TEST");

m_pCore->DoReact(react); }

}

Если необходимо по нажатию кнопки вывести собственное диалоговое окно, созданное в этом же MDL-файле, то необходимо предварительно использовать код, указанный в примере

 

 

 

HINSTANCE prev_hinst = AfxGetResourceHandle();

HMODULE hRes = GetModuleHandle("demo.mdl");

If (hRes) AfxSetResourceHandle (hRes);


//Код вывода диалогового окна:

СXXXDialog dlg;

dlg.DoModal();


AfxSetResourceHandle(prev_hinst);

virtual BOOL IsRegionObject()

Указывает на то, что объект будет поддерживать разделы ПК Интеллект. Разделы применяются для группировки объектов. Также они могут использоваться в системе отчетов

 

virtual BOOL IsProcessObject()

Указывает на то, что объект будет поддерживать возможность одновременного запуска и параллельной работы нескольких исполнительных модулей. Например, это может использоваться для запуска отдельного модуля непосредственно для каждого COM-порта.

Примечание. Рекомендуется использовать один рабочий модуль. Это упростит отладку и модификацию модуля

 

virtual void OnCreate(Msg&)

Используется при создании объекта. В качестве параметра передается ссылка на сообщение, содержащее информацию по объекту. Здесь же указываются параметры по умолчанию

virtual void OnCreate (Msg& msg)

{

msg.SetParam ("port","COM1");

}

virtual void OnInit(Msg&)

Используется при инициализации объекта. В качестве параметра передается ссылка на сообщение, содержащее информацию по объекту

virtual void OnInit (Msg& msg)

{

OnChange (msg, msg);

}

virtual void OnChange(Msg&,Msg&)

Используется при изменении объекта. В качестве параметра передаются ссылки на сообщения, содержащие информацию по объекту до и после изменения соответственно

virtual void OnChange(Msg& msg, Msg& prev)

{

React react (msg.GetSourceType(), msg.GetSourceId(),"INIT");

react.SetParam("port",msg.GetParam("port"));

m_pCore->DoReact(react);

}

virtual void OnDelete(Msg&)

Используется при удалении объекта. В качестве параметра передается ссылка на сообщение, содержащее информацию по объекту

virtual void OnDelete (Msg& msg)

{

React react (msg.GetSourceType(), msg.GetSourceId(),"EXIT");

m_pCore-> DoReact(react);

}

virtual void OnEnable(Msg&)

Предназначен для обработки нажатия кнопки Disable на панели ПК Интеллект при включении объекта. В качестве параметра передается ссылка на сообщение, содержащая информацию по объекту

 

virtual void OnDisable(Msg&)

Предназначен для обработки нажатия кнопки Disable на панели ПК Интеллект при выключении объекта. В качестве параметра передается ссылка на сообщение, содержащая информацию по объекту

 

virtual BOOL OnEvent(Event&)

Служит для обработки событий, передаваемых в качестве параметра

virtual BOOL

OnEvent(Event& event)

{

If

 (event.GetAction() == "ACCESS_IN" ||

event.GetAction() == "ACCESS_OUT")


{

 Msg per = m_pCore-> FindPersonInfoByCard(event.GetParam("facility_code"),

event.GetParam("card"));

event.SetParam

("param0", !per.GetSourceId().IsEmpty() ?

per.GetParam("name") : event.GetParam("facility_code") + event.GetParam("card"));

event.SetParam("param1", per.GetSourceId() );

}

Else


If (event.GetAction() == "NOACCESS_CARD")

{

event.SetParam

("param0",event.GetParam("facility_code") + event.GetParam("card"));

}

 return TRUE;

}

virtual BOOL OnReact(React&)

Служит для обработки реакций, передаваемых в качестве параметра

 

В глобальной функции CreateNissObject(CoreInterface* core) необходимо создать экземпляры описанных объектов, поместить их в массив CNissObjectDLLExtArray и возвратить указатель на объект этого массива. Через эту функцию необходимо получить указатель на интерфейс ядра, который в дальнейшем используется в объектах для обращения к методам данного интерфейса:

CNissObjectDLLExtArray* APIENTRY CreateNissObject(CoreInterface* core)

{

                               CNissObjectDLLExtArray* ar = new CNissObjectDLLExtArray;

 

                ar->Add(new NissObjectDemo(core));

                ar->Add(new NissObjectDemoDevice(core));

 

                               return ar;

}

После загрузки DLL-файла ядро вызывает функцию CreateNissObject и получает указатели на все используемые объекты.

Все панели настроек объектов хранятся в ресурсах в виде диалогов. Идентификаторы диалогов строятся по схеме IDD_object_SETUP, где object – это имя соответствующего объекта. Например, для объекта DEMO – это IDD_DEMO_SETUP, а для объекта DEMO_DEVICE – это IDD_DEMO_DEVICE _SETUP.

Примечание.

 Для того чтобы в дереве настроек у объекта отображался свой собственный значок, необходимо в ресурсах DLL-файла создать BITMAP размером 14x14 с именем объекта.
  • No labels