Pregunta

Esto está relacionado con mi otra pregunta , pero me sentía como si se lo pediría en una nueva pregunta.

Básicamente FLAC utiliza punteros de función para las devoluciones de llamada, y para poner en práctica las devoluciones de llamada con ctypes, utiliza CFUNCTYPE al prototipo, y luego utiliza la función prototype() para crearlos.

El problema que tengo con esto es que me di cuenta de que me gustaría crear mi función de devolución de llamada como tal (no estoy mostrando las estructuras que he recreado, FLAC__Frame es una estructura):

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

El problema que tengo es la implementación. FLAC__Frame Nunca se instancia por el programador, que sólo ha llamado desde de la función de inicialización, y los functions.I procesamiento de tener que escribir la función de devolución de llamada a mí mismo, pero problema es que no sé cómo iba a hacer esto, así que si alguien sabe cómo debo hacer esto, entonces un poco de ayuda sería muy apreciada.

¿Fue útil?

Solución

De acuerdo con la función pitón ctypes devolución de llamada docs puede definir

def my_callback(a, p, frame, p1, p2)
    pass

y luego crear un puntero a una función exigible C como esto:

callback = write_callback_prototype(my_callback)

Este puntero de función se puede pasar en FLAC

Otros consejos

  

El problema que tengo es la implementación. FLAC__Frame Nunca se instancia por el programador, que sólo ha llamado desde de la función de inicialización, y los functions.I procesamiento de tener que escribir la función de devolución de llamada a mí mismo, pero problema es que no sé cómo iba a hacer esto, así que si alguien sabe cómo debo hacer esto, entonces un poco de ayuda sería muy apreciada.

En ese caso, sólo tiene que utilizar:

import ctypes

class FLAC__Frame(ctypes.Structure):
    pass

y fingir que ya está definido, y no les importa, ya que sólo necesita puntero a ella, que es básicamente la posición en la memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top