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

Каждый адаптер должен включать функцию 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(){

}