Каждый адаптер должен включать createInstance()
функция. Механизм вызывает эту функцию, чтобы инстанцировать объекта класса вашего адаптера. Этот раздел включает следующие темы:
Алгоритм для createInstance()
функция проста: вызовите конструктора класса адаптера, чтобы инстанцировать объекта класса адаптера и возвратить указатель на объект. Механизм передает эти аргументы createInstance()
вашего адаптера функция.
createInstance()
функция принимает три аргумента:
imaqkit::IAdaptor* createInstance(imaqkit::IEngine* engine, imaqkit::DeviceInfo* deviceInfo, const char* FormatName)
Следующая таблица описывает эти аргументы. createInstance()
вашего адаптера функция должна возвратить указатель на
IAdaptor
объект.
Аргумент | Цель |
---|---|
| Обработайте к |
| Обработайте к |
| Вектор символов, который задает имя формата видео, поддержанного устройством или полным путем файла конфигурации устройства. Если это задает формат, это должен быть один из форматов, представленных |
Поскольку вы пишете код, который вызывает вашего конструктора класса адаптера, можно задать аргументы, принятые конструктором класса адаптера. Как минимум конструкторы адаптера должны принять указатель на IEngine
объект, который представляет связь между механизмом и вашим адаптером. Это задано IAdaptor
суперкласс. Ваш адаптер использует этот указатель на функции механизма доступа для упаковки фреймов изображения и возврата их к механизму.
В дополнение к этому обязательному аргументу много адаптеров также принимают два других аргумента
Обработайте к IDeviceInfo
объект, который задает устройство, с которым вы хотите соединиться
Вектор символов, задающий желаемый исходный формат приобретения или полный путь к файлу конфигурации устройства (также известный как файл камеры)
Это те же аргументы, переданные createInstance()
вашего адаптера функция.
Требования вашего устройства получения изображений определят то, что должен сделать ваш конструктор класса. Конструкторы класса обычно выполняют задачи, которые только должны быть выполнены однажды классом, такой как
Подготовка прослушивателей для всех специфичных для устройства свойств. Прослушиватели уведомляют класс, когда пользователь изменяет значение специфичного для устройства свойства. Смотрите, что Реализация Добирается и Поддержка Набора Специфичных для устройства Свойств.
Создание критического объекта раздела. Ваш адаптер будет использовать критический раздел, чтобы защитить элементы данных, к которым можно получить доступ от нескольких потоков. Смотрите Используя Критические Разделы.
Ваш конструктор класса не должен выполнять инициализацию устройства, потому что пользователь может хотеть создать несколько объектов ввода видео. Инициализация устройства происходит, когда пользователь запросил, чтобы системы координат — видели Открытие и закрытие Связи с Устройством.
Следующий пример показывает 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(){ }