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?
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.