Comment retourner un pointeur sur une structure en ctypes?
J'essaie de passer un pointeur sur une structure qui m'est donné comme valeur de retour de la fonction "barre" pour la fonction "foo_write'. Mais je reçois le message d'erreur "TypeError: doit être un ctypes type" pour la ligne " foo = POINTEUR(temp_foo)'. Dans le ctypes aide en ligne j'ai trouvé que " ctypes.POINTEUR' ne fonctionne qu'avec ctypes types. Connaissez-vous un autre moyen? Que recommanderiez-vous?
C:
typedef struct FOO_{
int i;
float *b1;
float (*w1)[];
}FOO;
foo *bar(int foo_parameter) {...
void foo_write(FOO *foo)
Python avec ctypes:
class foo(Structure):
_fields_=[("i",c_int),
("b1",POINTER(c_int)),
("w1",POINTER(c_float))]
temp_foo=foo(0,None,None)
foo = POINTER(temp_foo)
foo=myclib.bar(foo_parameter)
myclib.foo_write(foo)
Vouliez-vous dire de la barre() pour retourner
Avez-vous omis
FOO*
plutôt que foo*
?Avez-vous omis
from ctypes import *
?OriginalL'auteur Framester | 2010-06-28
Vous devez vous connecter pour publier un commentaire.
Votre
bar
fonction a une définition incorrecte, je suppose que tu veux dire que c'eststruct FOO_ *bar(int);
?Le code Python qui est mauvais dans le sens que
foo_parameter
n'est jamais déclarée, donc je ne suis pas 100% sûr de ce que vous voulez faire. Je suppose que vous voulez passer un paramètre de votre python-a déclaréfoo
, qui est une instance d'unestruct FOO_
, dans le Cbar(int)
et obtenir un pointeur versstruct FOO_
.Vous n'avez pas besoin de POINTEUR pour ce faire, les éléments suivants:
Depuis CTypes se terminera le type de retour de
bar()
dans un pointeur vers une struct pour vous.De foo un nom de classe, ou une variable ici? Comment c_types savoir que le type de retour de la barre est "foo"?
toto est à la fois classe et un nom de variable ?
FWIW ci-dessus 2 commentaires à propos de la classe vs nom de la variable sont périmés au bout de la dernière édition.
OriginalL'auteur richq
Changement
à
peut résoudre le problème.
Veuillez voir http://docs.python.org/library/ctypes.html#ctypes-pointers pour plus d'informations.
OriginalL'auteur czchen