Je suis en train d'appeler une fonction C assis dans un objet partagé de python, et en utilisant ctypes semble être la meilleure façon d'y parvenir. Je passer les types dérivés de cette fonction, le prototype de la fonction suivante:Appel d'une fonction à l'aide ctypes avec des pointeurs vers structs
int MyFunc (Config *config, int *argc, char **argv)
Le struct Config
est défini comme
typedef struct{ char *some_filename ;
char **some_other_filenames ;
int some_value ;
Coord resolution;
} Config;
Coord
est défini comme
typdef struct { double x, y, area } Coord ;
le python ctypes le code est alors juste une ré-écriture des types dérivés:
class COORD (ctypes.Structure):
_fields = [ ("lon",ctypes.c_double),\
("lat", ctypes.c_double),\
("area", ctypes.c_double)]
coords = COORD()
class CONFIG(ctypes.Structure):
_fields = [ ("some_filename", ctypes.c_char_p),\
("some_other_filenames", ctypes.c_char_p('\0' * 256)),\
("some_value", ctypes.c_int),\
("resolution", coords) ]
je puis mis en place les arguments pour MyFunc
:
MyFunc.argtypes = [ctypes.byref(CONFIG) , ctypes.POINTER(ctypes.c_int),\
ctypes.POINTER (ctypes.c_char_p)]
MyFunc.restype = ctypes.c_int
myargv = ctypes.c_char_p * 2
argv = myargv("One", "Two")
argc = ctypes.c_int (2)
retval = MyFunc ( ctypes.byref(config), ctypes.byref(argc), ctypes(argv))
Ceci, cependant, produit une erreur de segmentation. Quelqu'un a des idées sur ce qui se passe ici?
MISE À JOUR Il y avait une faute de frappe dans ma question, de couper et coller, problème est toujours là!
Vous avez raison, le membre entier était manquant. Je l'ai édité maintenant, mais c'était juste moi qui ai du mal à couper et coller! Merci! – Jose