Schnittstelle einer DLL mit Python mithilfe von Ctypes leicht gemacht
Die Nutzung der Funktionalitäten einer DLL aus Python heraus kann eine entmutigende Aufgabe sein. In diesem Artikel wird eine unkomplizierte Methode untersucht, die den Bedarf an überflüssigem C-Wrapper-Code überflüssig macht: ctypes.
ctypes verkörpert Benutzerfreundlichkeit. Es bietet eine elegante Schnittstelle für die native Interaktion mit C-Typ-Datenstrukturen und Funktionsprototypen. Betrachten Sie den folgenden Codeausschnitt:
<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 bietet Unterstützung für verschiedene C-Datentypen (z. B. int, char, short, void*) und ermöglicht die Übergabe von Werten oder Referenzen. Seine Vielseitigkeit erstreckt sich auch auf die Rückgabe spezifischer Datentypen.
Die Verwendung von ctypes ist besonders vorteilhaft beim Umgang mit DLLs mit einer konsistenten Schnittstelle, wie z. B. EHLLAPI von IBM. In solchen Fällen kann eine einzelne ctypes-Funktion alle Funktionalitäten der DLL verarbeiten. Allerdings würden Bibliotheken mit unterschiedlichen Funktionssignaturen eine eigene ctypes-Funktionskonfiguration für jede Funktion erfordern.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von ctypes einfach eine DLL mit Python verbinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!