ctypes による Python-DLL Divide のブリッジ
ソフトウェア開発の領域では、DLL として保存されることが多い外部ライブラリを利用する機能ファイルを使用すると、特定のプログラミング言語の機能を拡張できます。これは、ネイティブ言語の機能が特定の要件を満たしていない場合に適切になります。
そのようなシナリオの 1 つは、Python を使用し、DLL ファイル内の関数にアクセスしようとするときに発生します。追加の C ラッパー コードを作成すると、この対話が容易になりますが、不必要な複雑さが生じます。幸いなことに、Python は ctypes モジュールを通じて代替ソリューションを提供します。
ctypes について
ctypes は、C ベースのコードおよびライブラリとの直接対話を可能にするネイティブ Python モジュールです。 Python と DLL ファイルの間のギャップをシームレスに橋渡しし、中間コードを必要とせずに関数を呼び出すことができます。これは、事前定義された Python バインディングがない既存の DLL を操作する場合に特に有益です。
実践的な例
ctypes の使用の簡単さを説明するために、次のような例を考えてみましょう。 EHLLAPI ライブラリ DLL から関数を呼び出します。次の Python コードは、関連する主要な手順を示しています。
<code class="python">import ctypes # Load DLL into memory hllDll = ctypes.WinDLL("c:\PComm\ehlapi32.dll") # Set up function prototype and parameters hllApiProto = ctypes.WINFUNCTYPE( ctypes.c_int, # Return type ctypes.c_void_p, # Parameters 1 ... ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, # ... thru 4 ) hllApiParams = (1, "p1", 0), (1, "p2", 0), (1, "p3", 0), (1, "p4", 0) # Map the DLL call to a Python name hllApi = hllApiProto(("HLLAPI", hllDll), hllApiParams) # Call the DLL function 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 を使用すると、Python 開発者は追加のコード作成の煩わしさを避けて、DLL ファイルを簡単に操作できるようになります。 。その汎用性により、C ベースのライブラリからさまざまな関数を呼び出すことができ、Python プログラム内の可能性の範囲が大幅に広がります。
以上がctypes はどのようにして Python ファイルと DLL ファイル間のギャップを埋めるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。