L'ensemble du scénario est comme ceci:python Ctype: problème avec rappel à faire bibliothèque personnalisée python
- il y a une setmessagelistener fonction (a_structure, function_pointer) dans ma bibliothèque c.
Je vous écris une bibliothèque python qui est une enveloppe sur la bibliothèque c mentionnée ci-dessus à l'aide ctypes. donc ce que je l'ai fait est quelque chose comme ceci:
def setlistener(a_structure,function_pointer) listenerDeclaration = CFUNCTYPE(c_void_p, c_void_p) listenerFunction = listenerDeclaration(function_pointer) setMsgListener = c_lib.setMessageListener setMsgListener.argtypes = [c_void_p, c_void_p] setMsgListener.restype = c_ubyte if (setMsgListener(a_structure, listenerFunction)==0): sys.exit("Error setting message listener.")
- Maintenant, un autre programme Python ci-dessus utilise la fonction de ma bibliothèque Python pour faire le travail, mais le problème est:
quand je lance le programme cela me donne une erreur de segmentation car l'objet local (listenerfunction) est déjà récupéré (je pense) quand le contrôle est retourné par la fonction de la bibliothèque setListener() car il s'agit d'un objet local.
est-il une solution de contournement/solution à ce problème? Ou ai-je quelque chose manquant? veuillez suggérer ... merci à l'avance
quelqu'un ici ..? – ash