我正在尝试使用 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)
我将回调包装在一个类中的原因是因为这篇文章。基本上这是我试图阻止这个回调被垃圾收集。
谢谢你的尽心帮助。