インタラクティブPythonとC(ctypesのライブラリ)
ctypesのは、外部のPythonライブラリは、すでにコンパイル済みのC言語の関数とデータ型とのデータ交換呼び出し可能なのpythonを使用することができます。https://docs.python.org/3/library/ctypes.htmlに公式文書をctypesは
1. ctypesの基本データ型のマップ
2. PythonのコールライブラリC言語
C言語の関数を生成する1
#Step 1:test.cの
書式#include <stdio.hに>
追加INT(int型A、int型B)
{
リターンA + B;
}
。1
2
3。
4。
5。
6。
7。
8。
コンパイラlibtest.so 2.ダイナミックリンクライブラリファイル(DLL)を生成し
-fPIC -shared -o libtest.so test.cのgccの
1つの
3.コールDLLファイル
#Step 3:test.py
のctypesのインポートから*
MYLIB = CDLL( "libtest.so")またはcdll.LoadLibrary( "libtest.so")
追加= mylib.add
add.argtypes = [c_intの、c_intの]#パラメータタイプ、2 INT(c_intのはctypes型であり、上記テーブル)
add.restype =#c_intの戻り型、INT(c_intのはctypes型、上記の表を参照された)
SUM =追加(3 ,. 6)
。1
2
3
4
5
6
7
8つの
3ポインタと参照
インスタンスポインタ割り当てのためだけではなく、メモリの内容を変更するよりも、それが指す先のメモリアドレスを変更することになります。例ポインタ内容にオブジェクトポインタポイントを返すプロパティを有します。
機能説明
ByRefの(X [、オフセット])は、アドレスX、Xでなければならないインスタンスctypes型を返します。C&Xに対応しています。オフセットが相殺されます。
ポインタ(x)が作成され、Xのインスタンスへのポインタポイントを返し、xはインスタンスオブジェクトです。
POINTER(タイプ)型ポインタ型の型へのポインタである戻り型、ctypes型のタイプ。
インポートのctype *から
Iのc_intの=(1)
PI = POINTER(c_intの)(I)
PI2 =ポインタ(I)
印刷#pi.contentsリターンポインタ値オブジェクト
印刷pi2.contentsを
1
2
。3
。4
。5
。6
ポインタPOINTER違いは、ポインタがインスタンスを返し、ポインタ戻り型です。
4.データ構造タイプ
構造体と共用体の構造を継承し、ctypesのモジュールで定義されている連合の基底クラス必要があり、各サブクラスは、各フィールドの名前とタイプ、およびこの分野を含んで、フィールドはタプルの2次元リストで、プロパティフィールドを定義する必要があります型は、c_intのようなctypes型、またはそのような状構造、ユニオン、アレイ、ポインタ又は継承ctypesの、他の任意のタイプでなければなりません。
*インポートからctypesは
インポートタイプの
試験(構造)クラス:
_fields_ = [( 'X'、c_intの)、
('Y'、c_char)]
TEST1テスト=(1、2)
。1
2
3。
4。
5。
6。
ための構造。操作リストは、すなわち構造体を指すポインタを含む場合、以下のように、必要性が定義されます
ctypesから*インポートする
インポートタイプの
クラステスト(構造):
合格
Test._fields_ = [( 'X'、c_intの)、
('Y'、c_char)、
('次へ'、POINTER(試験))]
1
2
3
4
5
6
7
参考文献:
1. http://blog.csdn.net/jsky_studio/article/details/38597655
2. http://blog.csdn.net/linda1000/article/details/12623527
3. https://でWWW .cnblogs.com /ナイトライド・出発/ P / 4907613.html
基準からのテキストおよびコード参照の複数の部分、疑わしい場合は、詳細な説明を表示するための参考:これは、ことに留意されたいです。
----------------
免責事項:この記事は元の記事CSDNのブロガーが「awakeljw」で、CC 4.0 BY-SAの著作権契約書に従って、元のソースのリンクと、この文を添付してください、再現。 。
オリジナルリンクします。https://blog.csdn.net/awakeljw/article/details/79369703