Je tente d'encapsuler une bibliothèque C à l'aide de ctypes. Une caractéristique de la bibliothèque est un callback ondestroy qui est appelé quand un handle renvoyé par la bibliothèque est sur le point d'être détruit.Transmutation d'un objet ctypes.py_object dans un rappel
La fonction de rappel a la signature:
void cb(f *beingdestroyed);
L'API permet d'associer un spécifié par l'utilisateur avec void *
f quand il est retourné par la bibliothèque. Par conséquent, je peux associer le py_object utilisé pour l'envelopper en tant que données utilisateur. Mon plan est d'avoir un champ is_valid
et quand le callback est déclenché pour extraire les user_data et mettre ce champ à false.
Mon problème est de savoir comment extraire mon haut niveau py_object
; Je peux récupérer les données de l'utilisateur en tant que ctypes.void_p
et les convertir en ctypes.py_object
mais je n'ai que l'API Python C avec laquelle travailler. Il est possible de retourner vers un objet de haut niveau avec lequel je peux travailler en écrivant user_object.is_valid = 0
?
Merci, c'était exactement ce dont j'avais besoin. –