Вопрос

Я пишу несколько привязки SWIG / Python для некоторых C ++. Это для того, что называется случайным API Kinect, у меня есть функции двигателя и светодиодных функций работающий. Отказ Обратные вызовы класса прослушивателя, которые разбирают и заполняют буферы RGB и глубины, кажется, не вызываются от Swig. Данные охватывают потоки, очевидно, запускают и начнут запускать процессор, но никаких линий отладки от обратного вызова не пройдет. Что было бы лучшим способом заполнить буферы данных и легко добраться до них из Python?

class KinectListener
{
     public:
        virtual ~KinectListener(){};
        virtual void KinectDisconnected(Kinect *K) {};
        virtual void DepthReceived(Kinect *K) {};
        virtual void ColorReceived(Kinect *K) {};
        virtual void AudioReceived(Kinect *K) {};
};

Вот класс прослушивателя с виртуальными методами, может ли питон завернул версию этого класса для наследства слушателей для класса C ++? Я добавил минимальный слушатель в C ++, и теперь оставшаяся работа - эффективно доступа к массивам с помощью типов. В настоящее время я использую этот наивный типографскийap

%typemap(out) unsigned short [ANY] {
  int i;
  $result = PyList_New($1_dim0);
  for (i = 0; i < $1_dim0; i++) {
    PyObject *o = PyInt_FromLong((long)$1[i]);
    PyList_SetItem($result,i,o);
  }
}

Лучшие варианты?

Это было полезно?

Решение

Есть способ использования функции режиссеров. Включите его для вашего прокси-сервера KinectListener, одной строки кода:

%feature("director") KinectListener

Затем вы можете наследовать от класса KinectListener в коде Python и определить ваши функции.

Другие советы

По совпадению, я ищу обратных вызовов с Swig в данный момент.

То Документация Swig 2.0 говорит это:

SWIV обеспечивает полную поддержку указателей по функциям при условии, что функции обратного вызова определены в C, а не на целевом языке. ... Тем не менее, существующие функции C могут использоваться в качестве аргументов при условии, что вы устанавливаете их в качестве постоянных. Один из способов сделать это - использовать постоянную Директиву, подобную этой ...

Я планирую написать C Callback с рукописными JNI, чтобы позвонить в Java. Если есть другой путь, я бы тоже хотел услышать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top