Python から C/C を呼び出す
Windows システムで作業する場合、Python を C/C ライブラリに効率的にバインドすることが重要です。利用可能なオプションの中で、ctypes モジュールは魅力的な選択肢として際立っています。
バインディングに Ctypes を利用する
Ctypes は Python の標準ライブラリの不可欠な部分です。この固有の安定性と幅広い可用性により、他の代替手段と比較して有利なオプションとなります。さらに、ctypes バインディングは、コンパイル中に使用されるものだけでなく、ctypes をサポートするすべてのバージョンの Python でシームレスに動作するように調整されています。
Ctypes を使用した Python バインディングの構築
で定義された Foo という名前の簡略化された C クラスを考えてみましょう。 foo.cpp:
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
ctypes 経由で Python との通信を容易にするには、その関数を extern "C" として宣言する必要があります:
extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bar(Foo* foo){ foo->bar(); } }
次に、このコードを共有ライブラリにコンパイルします。 :
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
最後に、Python ラッパーを作成します (例: fooWrapper.py):
from ctypes import cdll lib = cdll.LoadLibrary('./libfoo.so') class Foo(object): def __init__(self): self.obj = lib.Foo_new() def bar(self): lib.Foo_bar(self.obj)
このラッパーを使用すると、C クラスと対話できます:
f = Foo() f.bar() # Outputs "Hello" to the screen
Ctypes の利点
Ctypes は、C/C コードを Python にバインドするプロセスを簡素化し、Windows システム上で安定した広く適用可能なソリューションを提供します。 Python のネイティブ ライブラリとインターフェースするための堅牢で相互互換性のあるアプローチを提供します。
以上がCtypes は Windows 上で Python と C/C をどのように効率的にブリッジできるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。