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 CFUNCTYPE sie zum Prototyp, und dann verwenden Sie die prototype() Funktion, sie zu schaffen.

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):

write_callback_prototype = CFUNCTYPE(c_int, c_void_p, 
                                     POINTER(FLAC__Frame), 
                                     POINTER(c_int32), v_void_p)

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.

War es hilfreich?

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.

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