Инстанцирование объекта адаптера

Каждый адаптер должен включать createInstance() функция. Механизм вызывает эту функцию, чтобы инстанцировать объекта класса вашего адаптера. Этот раздел включает следующие темы:

Предложенный алгоритм

Алгоритм для createInstance() функция проста: вызовите конструктора класса адаптера, чтобы инстанцировать объекта класса адаптера и возвратить указатель на объект. Механизм передает эти аргументы createInstance() вашего адаптера функция. createInstance() функция принимает три аргумента:

imaqkit::IAdaptor* createInstance(imaqkit::IEngine* engine,  
                      imaqkit::DeviceInfo* deviceInfo, 
                                const char* FormatName) 

Следующая таблица описывает эти аргументы. createInstance() вашего адаптера функция должна возвратить указатель на IAdaptor объект.

Аргумент

Цель

engine

Обработайте к IEngine объект, который позволяет вашему адаптеру связаться с механизмом.

deviceInfo

Обработайте к IDeviceInfo объект, который представляет характеристики конкретного устройства. Этот объект будет одним из IDeviceInfo объекты вы создали в своем getAvailHW() функция.

formatName

Вектор символов, который задает имя формата видео, поддержанного устройством или полным путем файла конфигурации устройства. Если это задает формат, это должен быть один из форматов, представленных IDeviceFormat объекты вы создали в своем getAvailHW() функция.

Реализация конструктора класса адаптера

Поскольку вы пишете код, который вызывает вашего конструктора класса адаптера, можно задать аргументы, принятые конструктором класса адаптера. Как минимум конструкторы адаптера должны принять указатель на 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();

Предложенный алгоритм

Проект вашего класса адаптера и требования вашего устройства получения изображений определят, какие задачи ваш деструктор класса должен выполнить. Ваш класс должен содержать деструктор, даже если это - пустая реализация. Некоторые примеры задач, которые может выполнить деструктор, включают:

Пример

Этот пример показывает скелетную реализацию деструктора. Для более полного примера смотрите демонстрационный класс адаптера.

MyAdaptor::~MyAdaptor(){

}