Le problème est le suivant
- Je dispose d'une dll existante ( à utiliser tel quelle)
- J'utilise le module "ctypes" pour appeler des fonctions de cette dll.Cela se passe tres bien tant que les types des arguments sont des entiers, des caractères ou tableau d'entiers.
- Les difficultés surviennent lorsqu'une fonction X prend des arguments de types un peu plus complexes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 lib.fonctionA.argtypes = [c_uint32,c_uint32] lib.fonctionA.restype = c_uint32 ib.fonctionA(arg1, arg2)
ex:
Sur un conseil il ma été proposé de wrapper la structure complexe avec SWIG (extension pour interfacer le C et le Python), pour quelle puisse ensuite être passée en parametre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef struct { int Mac_Address[6]; int IP_Address[4]; int UDP_Port; } IS_Port_struct; typedef struct { IS_Port_struct Transmit; IS_Port_struct Receive; } IS_Set_Ports_struct;
- Le wrapping se passe bien, j'arrive à instancier des objects de cette structure
- Le passage en arguments à la fonction X ne marche toujours pas
J'obtiens les erreurs suiivantes
-->"item 2 in _argtypes_ has no from_param method"
Code : Sélectionner tout - Visualiser dans une fenêtre à part lib.fonctionXs.argtypes = [c_uint32,type(wrapped_struct)]
-->"Don't know how to convert parameter 2"
Code : Sélectionner tout - Visualiser dans une fenêtre à part ib.fonctionXs(arg1, arg2)]
Voilà
Question
- Que faire pour pouvoir utiliser cette fonction?
- La methode "ctypes" peut elle prendre un object de type swig?
Partager