Frage

Ich schreibe einige SWIG / Python-Bindings für einige C ++ Code. Dies ist für das, was die Kinect Accidental API genannt wird, habe ich den Motor und führte Funktionen Arbeits . Die Rückrufe an die Listener-Klasse, die Parse und bevölkern die RGB- und Tiefe Puffer scheinen nicht von SWIG genannt werden. Die Datenerfassung Threads beginnt offenbar und starten Sie die CPU in Beschlag, aber keine Debug-Zeilen aus dem Rückruf kommen durch. Was wäre besser Weise zu bevölDatenPuffer sein und Zugriff auf sie leicht aus 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) {};
};

Hier ist die Listener-Klasse mit den virtuellen Methoden kann der Python wickelte Version dieser Klasse zu erben Zuhörer für die C ++ Klasse verwendet werden? Ich habe einen minimalen Zuhörer in C ++ und jetzt die verbleibende Arbeit ist es, die Arrays mit typemaps effizient zuzugreifen. Derzeit bin ich mit diesem naiven typemap

%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);
  }
}

Bessere Optionen?

War es hilfreich?

Lösung

Es gibt einen Weg, um die Direktoren-Funktion. Aktivieren Sie es für Ihre KinectListener Proxy, eine Codezeile:

%feature("director") KinectListener

Dann können Sie von KinectListener Klasse in Python-Code erben und Ihre Funktionen definieren.

Andere Tipps

Durch Zufall passieren ich im Moment in Rückrufe mit SWIG suchen werden.

Die SWIG 2.0-Dokumentation sagt dieser :

  

bietet SWIG volle Unterstützung für Funktionszeiger vorgesehen, dass die Callback-Funktionen definiert sind, in C und nicht in der Zielsprache. ... Allerdings können vorhandene C-Funktionen verwendet werden als Argumente, sofern Sie sie als Konstanten installieren. Eine Möglichkeit, dies zu tun, ist die% konstant Richtlinie wie folgt verwenden ...

Ich plane einen C-Callback mit handgeschriebenen JNI schreiben in Java zu nennen. Wenn es eine andere Möglichkeit ist, würde ich auch gerne hören.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top