4

Pythonコードが埋め込まれたCプログラムがあります。ソースからpython2.7.2をコンパイルし、libpython2.7.aに対してプログラムをリンクしました。

今度はPythonコードで、Cプログラムにリンクされている他のCライブラリから関数をコールバックしたいと思います。Python拡張機能を作成できます(このドキュメントの「EmbeddedPythonの拡張」を参照)。ただし、ctypesを使用すると、これがはるかに簡単になり、既存のコードを変更せずに使用できるようになります。

ctypesは共有ライブラリのロードを対象としており、静的プログラムコードに「ポイント」する方法があるかどうか疑問に思っていました。

ターゲットがiOSであり、AFAIK共有ライブラリがAppleによって禁止されているため、関連するコードを共有ライブラリにコンパイルできません。

4

2 に答える 2

2

Pythonコードから、次のような静的関数のctypesラッパーを作成できます。

restype = ctypes.c_int
argtypes = [ctypes.c_int, ctypes.c_double]        # or whatever
functype = ctypes.CFUNCTYPE(restype, *argtypes)
wrapper = functype(address_of_static_function_as_an_int)

もちろん、Cコードからこの(または同様の)コードを呼び出すことができます。

于 2012-06-13T13:33:08.813 に答える
0

関数ポインタをカプセル化するctypes値(例ctypes.c_void_p)を作成し、Pythonコードに渡します。

于 2012-06-13T13:40:18.850 に答える