Каждый адаптер должен включать createInstance() функция. Обработчик вызывает эту функцию для создания экземпляра объекта класса адаптера. Этот раздел включает следующие темы:
Алгоритм для createInstance() функция проста: вызовите конструктор класса адаптера, чтобы создать экземпляр объекта класса адаптера и вернуть дескриптор объекту. Движок передает эти аргументы адаптеру createInstance() функция. createInstance() функция принимает три аргумента:
imaqkit::IAdaptor* createInstance(imaqkit::IEngine* engine,
imaqkit::DeviceInfo* deviceInfo,
const char* FormatName)
Эти аргументы описаны в следующей таблице. Ваш адаптер createInstance() функция должна возвращать дескриптор IAdaptor объект.
Аргумент | Цель |
|---|---|
| Обращение к |
| Обращение к |
| Вектор символов, указывающий имя видеоформата, поддерживаемого устройством, или полный путь к файлу конфигурации устройства. Если указан формат, он должен быть одним из форматов, представленных |
Поскольку создается код, вызывающий конструктор класса адаптера, можно определить аргументы, принятые конструктором класса адаптера. Как минимум, конструкторы адаптеров должны принимать дескриптор к IEngine объект, представляющий соединение между модулем и адаптером. Это определяется IAdaptor суперкласс. Адаптер использует этот дескриптор для доступа к функциям механизма для упаковки кадров изображения и возврата их в механизм.
В дополнение к этому обязательному аргументу, многие адаптеры также принимают два других аргумента
Обращение к IDeviceInfo объект, указывающий устройство, к которому требуется подключиться
Символьный вектор, задающий требуемый формат источника получения или полный путь к файлу конфигурации устройства (также известный как файл камеры)
Это те же аргументы, переданные адаптеру createInstance() функция.
Требования устройства получения изображений определяют, что должен делать конструктор класса. Конструкторы классов обычно выполняют задачи, которые класс должен выполнять только один раз, например
Настройка прослушивателей для всех свойств устройства. Прослушиватели уведомляют класс, когда пользователь изменяет значение свойства, зависящего от устройства. См. раздел Реализация поддержки Get and Set для свойств, специфичных для устройства.
Создание критического объекта-сечения. Адаптер будет использовать критический раздел для защиты элементов данных, доступ к которым может осуществляться из нескольких потоков. См. раздел Использование критических сечений.
Примечание
Конструктор класса не должен выполнять инициализацию устройства, поскольку пользователь может создать несколько объектов ввода видео. Инициализация устройства происходит, когда пользователь запросил кадры - см. раздел Открытие и закрытие соединения с устройством.
В следующем примере показан createInstance() функция, создающая экземпляр объекта класса MyDeviceAdaptor.
imaqkit::IAdaptor* createInstance(imaqkit::IEngine* engine,
imaqkit::IDeviceInfo* deviceInfo,
char* formatName) {
// Instantiate an object of your IAdaptor-derived class
imaqkit::IAdaptor* adaptor = new
MyDeviceAdaptor(engine,deviceInfo,formatName);
return adaptor;
}
Этот деструктор вызывается при каждом удалении связанного объекта ввода видео в программном обеспечении MATLAB ®.
delete(vid);
Деструктор для класса не может принимать параметры или возвращать значение. Класс адаптера как производный класс должен содержать деструктор, а деструктор должен быть объявлен как виртуальный.
virtual ~MyAdaptor();
Дизайн класса адаптера и требования устройства получения изображения определят, какие задачи должен выполнять деструктор класса. Класс должен содержать деструктор, даже если он является пустой реализацией. Некоторые примеры задач, которые может выполнять деструктор:
Остановка устройства, если оно получает кадры в данный момент - см. Предлагаемый алгоритм для stopCapture ().
Закрытие соединения с устройством - см. раздел Предлагаемый алгоритм для closeDevice ().
Удаление объекта критического сечения - см. Использование критических сечений.
В этом примере показана скелетная реализация деструктора. Более полный пример см. в разделе Класс демонстрационного адаптера.
MyAdaptor::~MyAdaptor(){
}