Salut,
Je suis confronté au problème d'interfacer python avec une DLL, il s'agit du driver d'une interface can/usb de chez IXXAT http://www.ixxat.com/download_vci_v3_en.html. Pour prendre le problème à la base, j'ai créé une dll en C sous code bloc:
Je l'ai ensuite chargée et utilisée sans problème sous python:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <stdio.h> float __declspec (dllexport) addFloats(float op1, float op2) { float op3 = op1 + op2; printf("C language -> %f + %f = %f\n", op1, op2, op3); return op3; }
Le résultat semble prometteur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 import ctypes dll_name = "bin/Release/dummy_dll" dynlib = ctypes.CDLL(dll_name) dynlib.addFloats.restype = ctypes.c_float dynlib.addFloats.argtypes = [ctypes.c_float, ctypes.c_float] op1 = 12.34 op2 = 23.45 op3 = dynlib.addFloats(op1, op2) print "Python -> %f + %f = %f"%(op1, op2, op3)
Comme j'ai vu que ça semblait réalisable, je me suis dit que j'allais faire pareil avec la dll de chez IXXAT... Y a t-il un moyen en python pour récupérer les noms des fonctions embarquées dans la dll? python me trouve les noms des fonctions qui viennent directement de la documentation... j'ai essayé toutes les combinaisons en commentant diverses lignes... Ai-je loupé quelquechose?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 C language -> 12.340000 + 23.450001 = 35.790001 Python -> 12.340000 + 23.450000 = 35.790001 Appuyez sur une touche pour continuer...
Ce qui donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 import ctypes dll_name = "vciapi" dynlib = ctypes.cdll.LoadLibrary(dll_name) dynlib = ctypes.CDLL(dll_name) print type(dynlib), dynlib print getattr(dynlib, "VCI_ReadBoardInfo") print dynlib.VCI_Init
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <class 'ctypes.CDLL'> <CDLL 'vciapi', handle 10000000 at 218ff10> Traceback (most recent call last): File "test_dll.py", line 9, in <module> print getattr(dynlib, "VCI_ReadBoardInfo") File "c:\python27\lib\ctypes\__init__.py", line 366, in __getattr__ func = self.__getitem__(name) File "c:\python27\lib\ctypes\__init__.py", line 371, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) AttributeError: function 'VCI_ReadBoardInfo' not found >Exit code: 1
Pfeuh
Partager