Python ctypes und Funktionszeiger
-
22-08-2019 - |
Frage
Dies bezieht href="https://stackoverflow.com/questions/867850/creating-a-wrapper-for-ac-library-in-python"> meine andere Frage
Im Wesentlichen verwendet FLAC Funktionszeiger für Rückrufe und Rückrufe mit ctypes zu implementieren, verwenden Sie Das Problem, das ich mit diesem ist, dass ich dachte, dass ich meine Callback-Funktion als solche schaffen würde (ich bin nicht die Strukturen zeigt, die ich neu erstellt haben, FLAC__Frame ist eine Struktur): Das Problem, das ich habe, ist die Umsetzung. FLAC__Frame wird nie durch den Programmierer instanziiert, wird es nur von der Initialisierung Funktion aufgerufen, und die Verarbeitung functions.I hat die Callback-Funktion selbst zu schreiben, aber er Problem ist, dass ich weiß nicht, wie ich dies tun würde, also wenn jemand weiß, wie ich dies tun sollte, dann würde etwas Hilfe sehr geschätzt. CFUNCTYPE
sie zum Prototyp, und dann verwenden Sie die prototype()
Funktion, sie zu schaffen. write_callback_prototype = CFUNCTYPE(c_int, c_void_p,
POINTER(FLAC__Frame),
POINTER(c_int32), v_void_p)
Lösung
Nach der ctypes Rückruf docs Python Funktion definieren
def my_callback(a, p, frame, p1, p2)
pass
und erstellen Sie einen Zeiger auf eine C aufrufbare Funktion wie folgt aus:
callback = write_callback_prototype(my_callback)
Diese Funktion Zeiger kann dann in FLAC geben wird
Andere Tipps
Das Problem, das ich habe, ist die Umsetzung. FLAC__Frame wird nie durch den Programmierer instanziiert, wird es nur von der Initialisierung Funktion aufgerufen, und die Verarbeitung functions.I hat die Callback-Funktion selbst zu schreiben, aber er Problem ist, dass ich weiß nicht, wie ich dies tun würde, also wenn jemand weiß, wie ich dies tun sollte, dann würde etwas Hilfe sehr geschätzt.
In diesem Fall verwenden Sie einfach:
import ctypes
class FLAC__Frame(ctypes.Structure):
pass
und so tun, dass es bereits definiert ist, und kümmern sich nicht, weil Sie nur Zeiger auf sie benötigen, die im Speicher grundsätzlich Position ist.