PythonがC言語を呼び出す方法【ctypesモジュールベース】

2273 ワード

この例では、PythonがC言語を呼び出す方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
Pythonのctypesモジュールは、Python呼び出しCメソッドの中で最も簡単なものである可能性があります.ctypesモジュールは、dllファイルをロードするためにC言語と互換性のあるデータ型と関数を提供するため、呼び出し時にソースファイルを変更する必要はありません.このようにして、この方法の簡単さを築いたのです.
例は次のとおりです.
2つの数の和を求めるCコードを実現し、addとして保存する.c

//sample C file to add 2 numbers - int and floats
#include 
int add_int(int, int);
float add_float(float, float);
int add_int(int num1, int num2){
  return num1 + num2;
}
float add_float(float num1, float num2){
  return num1 + num2;
}


次に、Cファイルを.soファイル(windowsではDLL).次の操作でadderが生成されます.soファイル

#For Linux
$ gcc -shared -Wl,-soname,adder -o adder.so -fPIC add.c
#For Mac
$ gcc -shared -Wl,-install_name,adder.so -o adder.so -fPIC add.c
#For windows
$
gcc -shared -Wl,-soname,adder -o adder.dll -fPIC add.c


今Pythonコードで呼び出します

from ctypes import *
#load the shared object file
adder = CDLL('./adder.so')
#Find sum of integers
res_int = adder.add_int(4,5)
print "Sum of 4 and 5 = " + str(res_int)
#Find sum of floats
a = c_float(5.5)
b = c_float(4.1)
add_float = adder.add_float
add_float.restype = c_float
print "Sum of 5.5 and 4.1 = ", str(add_float(a, b))


出力は次のとおりです.

Sum of 4 and 5 = 9
Sum of 5.5 and 4.1 = 9.60000038147


この例では,Cファイルは自己解釈であり,整形和浮動小数点型和をそれぞれ実現する2つの関数を含む.
Pythonファイルでは、最初にctypesモジュールをインポートし、CDLL関数を使用して作成したライブラリファイルをロードします.これにより、Cクラスライブラリの関数を変数adderで使用することができます.adder.add_int()が呼び出されると、内部でC関数add_が開始される.intの呼び出し.ctypesインタフェースでは、C関数を呼び出すときに、オリジナルPythonのデフォルトの文字列型と整数型を使用できます.
ブール型や浮動小数点型のような他のタイプでは、正しいctype型を使用する必要があります.adder.add_float()関数にパラメータを渡す場合は、まずPythonの10進数値をc_に変換します.floatタイプは、C関数に転送されます.この方法は簡単ではっきりしているが,制限されている.たとえば、Cでオブジェクトを操作することはできません.
Pythonに関する詳細について興味のある読者は、「Pythonプロセスとスレッド操作テクニックのまとめ」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニックのまとめ」、「Python文字列操作テクニックのまとめ」、「Python入門と進級経典チュートリアル」、「Pythonファイルとディレクトリ操作テクニックのまとめ」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.