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