Перейти в хранилище документации
Обратиться в техническую поддержку
Для создания mdl-файла необходимо использовать два класса:
Объявленные классы и методы содержатся в заголовочном файле 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.
Примечание.