Interfacer une DLL avec Python en toute simplicité grâce à Ctypes
Exploiter les fonctionnalités d'une DLL à partir de Python peut être une tâche ardue. Cet article explore une méthode simple qui évite le besoin de code wrapper C superflu : ctypes.
ctypes incarne la facilité d'utilisation. Il fournit une interface élégante pour interagir de manière native avec les structures de données de type C et les prototypes de fonctions. Considérez l'extrait de code suivant :
<code class="python">import ctypes # Load the DLL into memory hllDll = ctypes.WinDLL("c:\PComm\ehlapi32.dll") # Define the function prototype and parameters hllApiProto = ctypes.WINFUNCTYPE( ctypes.c_int, # Return type ctypes.c_void_p, # Parameter 1 ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p) # ... hllApiParams = ( (1, "p1", 0), (1, "p2", 0), (1, "p3", 0), (1, "p4", 0)) # Create a Python-callable function hllApi = hllApiProto(("HLLAPI", hllDll), hllApiParams) # Call the DLL function with variables p1 = ctypes.c_int(1) p2 = ctypes.c_char_p(sessionVar) p3 = ctypes.c_int(1) p4 = ctypes.c_int(0) hllApi(ctypes.byref(p1), p2, ctypes.byref(p3), ctypes.byref(p4))</code>
ctypes prend en charge divers types de données C (par exemple, int, char, short, void*) et permet le passage par valeur ou le passage par référence. Sa polyvalence s'étend également au renvoi de types de données spécifiques.
L'utilisation de ctypes est particulièrement bénéfique lorsqu'il s'agit de DLL avec une interface cohérente, telle que l'EHLLAPI d'IBM. Dans de tels cas, une seule fonction ctypes peut gérer toutes les fonctionnalités de la DLL. Cependant, les bibliothèques avec des signatures de fonction variables nécessiteraient une configuration de fonction ctypes distincte pour chaque fonction.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!