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:
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;
}
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
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)
Le résultat semble prometteur:
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...
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
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
Ce qui donne:
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
A+

Pfeuh