Ctypes を使用して DLL と Python のインターフェースを簡単に
Python 内から DLL の機能を利用するのは、困難な作業になる場合があります。この記事では、無関係な C ラッパー コードの必要性を回避する簡単な方法、ctypes について説明します。
ctypes は使いやすさの典型です。 C タイプのデータ構造および関数プロトタイプとネイティブに対話するためのエレガントなインターフェイスを提供します。次のコード スニペットを考えてみましょう。
<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 は、さまざまな C データ型 (int、char、short、void* など) のサポートを提供し、値渡しまたは参照渡しを可能にします。その多用途性は、特定のデータ型を返すことにも拡張されます。
ctypes の利用は、IBM の EHLLAPI など、一貫したインターフェイスを持つ DLL を扱う場合に特に有益です。このような場合、単一の ctypes 関数で DLL のすべての機能を処理できます。ただし、さまざまな関数シグネチャを持つライブラリでは、関数ごとに個別の ctypes 関数構成が必要になります。
以上がctypes を使用して DLL と Python を簡単に接続するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。