Для создания 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 GetParentType() | Возвращает тип родительского объекта |
| |
virtual int GetPos() | Возвращает позицию объекта в ключевом файле “intellect.sec”. Внимание! Этот параметр должен быть согласован с компанией «Ай Ти Ви групп» |
Примечание. При запуске ПК Интеллект в демо-режиме функция возвращает -1 | |
virtual CString GetPort() | Возвращает номер порта, через который будет происходить соединение и обмен сообщениями между объектом и ядром Внимание! Этот параметр должен быть согласован с компанией «Ай Ти Ви групп» |
| |
virtual CString GetProcessName() | Возвращает имя процесса. Используется ядром для поиска и автоматического запуска исполнительного модуля при старте системы и инициализации модуля |
| |
virtual CString GetDeviceType() | Определяет тип объекта и характер его поведения.
ACD – объект этого типа получает все события, связанные с созданием, изменением и удалением следующих объектов: Пользователи, Временная зона и Уровни доступа
ACD2– тип аналогичный ACD с дополнительной (обеспеченной ядром) возможностью автоматически удалять временные (с ограниченным сроком действия) карточки
Тип ACR указывает на то, что объект является считывателем
| Все объекты типа ACR доступны в раскрывающемся списке Точка прохода | |
virtual BOOL HasChild() | Возвращает TRUE, если у объекта есть дочерние объекты, иначе – FALSE |
| |
virtual UINT HasSetupPanel() | Если у объекта имеется панель настроек, метод возвращает TRUE, иначе – FALSE |
| |
virtual void OnPanelInit(CWnd*) | Используется при инициализации панели настроек объекта. В качестве параметра передается указатель на окно панели настроек |
| |
virtual void OnPanelLoad(CWnd*,Msg&) | Используется при загрузке панели настроек для получения параметров объекта. В качестве параметра метода передается указатель на окно панели настроек и ссылка на сообщение, через которое осуществляется передача параметров объекта, и заполнение ими необходимых полей в панели настроек |
| |
virtual void OnPanelSave(CWnd*,Msg&) | Используется при выгрузке панели настроек для сохранения параметров объекта. В качестве параметра метода передается указатель на окно панели настроек и ссылка на сообщение, через которое осуществляется передача параметров объекта и сохранение их в БД |
| |
virtual void OnPanelExit(CWnd*) | Используется при закрытии панели настроек объекта. В качестве параметра передается указатель на окно панели настроек |
| |
virtual void OnPanelButtonPressed(CWnd*,UINT) | Предназначен для обработки нажатий кнопок на панели настроек объекта. В качестве параметра передается указатель на окно панели настроек и идентификатор кнопки. Примечание. Числовые значения идентификаторов кнопок должны начинаться с номера 1151. Например, для кнопки Test идентификатор в файле Resource.h определяется как: #define IDC_TEST 1151
|
| |
Если необходимо по нажатию кнопки вывести собственное диалоговое окно, созданное в этом же MDL-файле, то необходимо предварительно использовать код, указанный в примере
|
| ||
virtual BOOL IsRegionObject() | Указывает на то, что объект будет поддерживать разделы ПК Интеллект. Разделы применяются для группировки объектов. Также они могут использоваться в системе отчетов |
| |
virtual BOOL IsProcessObject() | Указывает на то, что объект будет поддерживать возможность одновременного запуска и параллельной работы нескольких исполнительных модулей. Например, это может использоваться для запуска отдельного модуля непосредственно для каждого COM-порта. Примечание. Рекомендуется использовать один рабочий модуль. Это упростит отладку и модификацию модуля |
| |
virtual void OnCreate(Msg&) | Используется при создании объекта. В качестве параметра передается ссылка на сообщение, содержащее информацию по объекту. Здесь же указываются параметры по умолчанию |
| |
virtual void OnInit(Msg&) | Используется при инициализации объекта. В качестве параметра передается ссылка на сообщение, содержащее информацию по объекту |
| |
virtual void OnChange(Msg&,Msg&) | Используется при изменении объекта. В качестве параметра передаются ссылки на сообщения, содержащие информацию по объекту до и после изменения соответственно |
| |
virtual void OnDelete(Msg&) | Используется при удалении объекта. В качестве параметра передается ссылка на сообщение, содержащее информацию по объекту |
| |
virtual void OnEnable(Msg&) | Предназначен для обработки нажатия кнопки Disable на панели ПК Интеллект при включении объекта. В качестве параметра передается ссылка на сообщение, содержащая информацию по объекту |
| |
virtual void OnDisable(Msg&) | Предназначен для обработки нажатия кнопки Disable на панели ПК Интеллект при выключении объекта. В качестве параметра передается ссылка на сообщение, содержащая информацию по объекту |
| |
virtual BOOL OnEvent(Event&) | Служит для обработки событий, передаваемых в качестве параметра |
| |
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 с именем объекта. |