Создание экземпляров объекта адаптера

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

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

Алгоритм для createInstance() функция проста: вызовите конструктор класса адаптера, чтобы создать экземпляр объекта класса адаптера и вернуть указатель на объект. Двигатель передает эти аргументы в createInstance() вашего адаптера функция. The 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() функция.

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

Требования вашего устройства для сбора изображений будут определять, что должен делать ваш конструктор класса. Конструкторы классов обычно выполняют задачи, которые должны выполняться только один раз классом, такие как

  • Настройка прослушивателей для всех свойств конкретного устройства. Прослушиватели уведомляют класс, когда пользователь изменяет значение свойства конкретного устройства. См. «Реализация Get and Set Support for Device-Specific Properties».

  • Создание критического объекта сечения. Адаптер будет использовать критический раздел для защиты представителей данных, к которым можно получить доступ из нескольких потоков. См. Использование критических разделов.

    Примечание

    Конструктор класса не должен выполнять инициализацию устройства, поскольку пользователь может захотеть создать несколько объектов входа видео. Инициализация устройства происходит, когда пользователь запросил системы координат - см. «Открытие и закрытие соединения с устройством».

Пример

Следующий пример показывает 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();

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

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

Пример

Этот пример показывает скелетную реализацию деструктора. Более полный пример см. в классе demo adaptor.

MyAdaptor::~MyAdaptor(){

}