ctypes を使用して Python で C ライブラリをラップしようとしています。関数呼び出しには、ドキュメントを使用して実装したコールバック関数が必要です。問題は、コールバック関数がライブラリからのカスタム オブジェクトを予期していることです。PythonでコピーしようとしているCのコードは次のとおりです
void outputCallback(const A* a, void* b) {
//
}
a = function1(0, 0, outputCallback, 0, 0)
ヘッダー ファイル内の A の構造定義は次のとおりです。
typedef struct A
{
const unsigned char* a1;
unsigned int a2;
} A;
そしてPythonの同等物での私の試み。
class A(Structure):
_fields_ = [
("a1", ?, ?),
("a2", c_int, 16)]
class Callback():
def outputCallback(self, a):
print a.a2
return 1
cb = Callback()
CMPFUNC = CFUNCTYPE(c_int, POINTER(A))
cb.cmp_func = CMPFUNC(cb.outputCallback)
cdll.LoadLibrary("library.so")
libc = CDLL("library.so")
a = libc.function1(0, 0, cb.cmp_func, 0, 0)
クラスでコールバックをラップした理由は、この投稿のためです。基本的には、このコールバックがガベージ コレクションされないようにする試みでした。
ご協力いただきありがとうございます。