Я новичок в C ++ и начал дурачиться с моими Kinect V2 и libfreenect2.
Мне кажется, здание библиотеки работало нормально. Но когда я пытаюсь использовать его в своем коде, я получаю некоторые странные исключения.
Freenect2 freenect2;
std::string serial="";
Freenect2Device *dev = 0;
freenect2.enumerateDevices();
serial = freenect2.getDefaultDeviceSerialNumber();
dev = freenect2.openDevice(serial);
Каждый раз, когда я запускаю этот код, он не может получить серийный номер [serial = freenect2.getDefaultDeviceSerialNumber ();] с помощью:
«Необработанное исключение: нарушение прав на чтение.
_Pnext был 0xFFFFFFFFFFFFFFFF. «
В случае, если я использую
Freenect2 freenect2;
Freenect2Device *dev = 0;
SyncMultiFrameListener listener(Frame::Color);
FrameMap frames;
freenect2.enumerateDevices();
dev = freenect2.openDefaultDevice();
dev->setColorFrameListener(&listener);
dev->start();
listener.waitForNewFrame(frames)
вместо этого происходит сбой при ожидании нового кадра [listener.waitForNewFrame (frames)] со следующим сгенерированным исключением:
«Исключение, выданное в 0x000000018026D0C2 (ig75icd64.dll) в ConsoleApplication1.exe: 0xC0000005: расположение записи нарушения прав доступа 0x000000002BA0D700.
«
Итак, что я делаю не так и как я могу сделать это лучше?
Спасибо за совет.
Редактировать: сократил код …
Я столкнулся с той же проблемой в режиме отладки, но она работала в версии.
После нескольких часов исследований мне удалось решить проблему с помощью флаг компиляции в проекте libfreenect2 (при настройке отладки).
Проект freenect2 был отмечен как
Multi-threaded DLL (/MD)
и если
вы меняете это наMulti-threaded Debug DLL (/MDd)
он должен работать.
В VS2015 вы можете получить доступ к этому свойству на:
Свойства проекта -> C / C ++ -> Генерация кода -> Библиотека времени выполнения
Других решений пока нет …