Имя моего класса — HandMotionRecognition, и я вызываю метод getColorPixel в обратном вызове мыши. Это в OpenCV с использованием Visual Studio 2010, а тип проекта — c++ -> cli.
Стандартный код (если я не ошибаюсь) для обработки событий мыши:
cvSetMouseCallback( "CameraIn", getColorPixel, (void*) frameHSV);
Но при компиляции выдает ошибку времени компиляции
ошибка C3867: 'HandMotionRecognition::getColorPixel': в вызове функции отсутствует список аргументов; используйте '&HandMotionRecognition::getColorPixel' для создания указателя на элемент
Затем я делаю, как сказал, и помещаю код следующим образом...
cvSetMouseCallback( "CameraIn", &HandMotionRecognition::getColorPixel, (void*) frameHSV);
Но опять получаю ошибку компиляции..
ошибка C3374: невозможно получить адрес «HandMotionRecognition::getColorPixel», если не создан экземпляр делегата
Итак, я создаю делегата, подобного этому... [создание делегата.. Я не знаю, что это на 100% правильно]
Я поставил
delegate void MouseCallbackDelegate( int event, int x, int y, int flags, void *param );
в HandMotionRecognition.hЯ поместил этот код в HandMotionRecognition.cpp вместо
cvSetMouseCallback( "CameraIn", &HandMotionRecognition::getColorPixel, (void*) frameHSV);
MouseCallbackDelegate ^StaticDelInst = gcnew MouseCallbackDelegate(this, &HandMotionRecognition::getColorPixel);
cvSetMouseCallback("CameraIn", StaticDelInst, (void*)frameHSV);
Но затем он дает ошибку компиляции: (это единственная ошибка, которую я получаю)
ошибка C2664: «cvSetMouseCallback»: невозможно преобразовать параметр 2 из «HandMotionRecognition::MouseCallbackDelegate ^» в «CvMouseCallback»
(Насколько я вижу... это связано с использованием cli вместо win32)
Есть ли обходной путь или я что-то не так делаю???
Пожалуйста помоги...