Il existe une fonction d'une DLL (langage C) link("parameters", &connection);
qui prend un paramètre de chaîne et initialise une connexion.passage objet en tant qu'argument de la fonction
Il existe une fonction , où connection
est l'objet initialisé avec un appel à link()
.
Je passe l'objet de connexion Python à la fonction connect()
comme argument
connection_t = ctypes.c_uint32
link = mydll.link
link.argtypes=(ctypes.c_char_p, ctypes.POINTER(connection_t))
connect = mydll.connect
connect.argtypes=(connection_t,)
...
connection = connection_t()
link ("localhost: 5412", ctypes.byref(connection))
...
Mais si je transfère l'objet « connexion » à une autre fonction de la bibliothèque mydll, la fonction retourne une valeur, mais la valeur est incorrecte .
func=mydll.func
status_t=ctypes.c_uint32
status=status_t()
func.argtypes=(ctypes.c_ulong,ctypes.POINTER(status_t))
result=func(connection, ctypes.byref(status))
Dans cet exemple result=0
, mais dans le C-variante de ce code, je reçois une valeur correcte (pas 0)
Pourquoi?
Êtes-vous sûr que vous devriez regarder à 'result' et non' status'? – yak
'connection_t' est un' ctypes.c_uint32', mais le premier 'func.argtypes' est un' ctypes.c_ulong'? – martineau
yak, désolé, je veux dire la valeur de «statut». Mais si 'status' est incorrect alors la valeur 'result' est également incorrecte. – KLM