SWIG C ++ Bindings mit Callback

8

Ich schreibe einige SWIG / Python-Bindungen für einige C ++ - Code. Dies ist für die sogenannte Kinect Accidental API, ich habe die Motor- und LED-Funktionen funktioniert . Die Callbacks zu der Listener-Klasse, die die RGB- und Depth-Puffer parsen und auffüllen, scheinen von SWIG nicht aufgerufen zu werden. Die Datenerfassungsthreads starten offensichtlich und beginnen, die CPU zu packen, aber es kommen keine Debug-Zeilen vom Callback durch. Was wäre der beste Weg, Datenpuffer zu füllen und einfach von Python darauf zuzugreifen?

%Vor%

Hier ist die Listener-Klasse mit den virtuellen Methoden, kann die Python-Wrapped-Version dieser Klasse verwendet werden, um Listener für die C ++ - Klasse zu erben? Ich habe einen minimalen Listener in C ++ hinzugefügt und jetzt besteht die verbleibende Arbeit darin, effizient auf die Arrays mit Typemaps zuzugreifen. Momentan verwende ich diese naive Typemap

%Vor%

Bessere Optionen?

    
whatnick 23.11.2010, 12:03
quelle

2 Antworten

3

Es gibt eine Möglichkeit, die Direktorenfunktion zu verwenden. Aktivieren Sie es für Ihren KinectListener-Proxy, eine Zeile Code:

%Vor%

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

    
N0vember 29.12.2010, 17:10
quelle
2

Zufällig stöbere ich gerade mit Callbacks mit SWIG.

Die SWIG 2.0 Dokumentation sagt dies :

  

SWIG bietet vollständige Unterstützung für Funktionszeiger, sofern die Callback-Funktionen in C und nicht in der Zielsprache definiert sind. ... Vorhandene C-Funktionen können jedoch als Argumente verwendet werden, vorausgesetzt, Sie installieren sie als Konstanten. Eine Möglichkeit, dies zu tun, besteht darin, die Konstante% constant wie folgt zu verwenden ...

Ich plane, einen C-Callback mit handgeschriebenem JNI zu schreiben, um Java aufzurufen. Wenn es einen anderen Weg gibt, würde ich es auch gerne hören.

    
Andy Thomas 29.11.2010 21:33
quelle

Tags und Links