Appel d'une dll C depuis du code Python
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.
Code:
1 2 3
| lib.fonctionA.argtypes = [c_uint32,c_uint32]
lib.fonctionA.restype = c_uint32
ib.fonctionA(arg1, arg2) |
- Les difficultés surviennent lorsqu'une fonction X prend des arguments de types un peu plus complexes
ex:
Code:
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; |
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
- 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
Code:
lib.fonctionXs.argtypes = [c_uint32,type(wrapped_struct)]
-->"item 2 in _argtypes_ has no from_param method"
Code:
ib.fonctionXs(arg1, arg2)]
-->"Don't know how to convert parameter 2"
Voilà
Question
- Que faire pour pouvoir utiliser cette fonction?
- La methode "ctypes" peut elle prendre un object de type swig?