我遇到了一个问题,即使用ctypes注册多个回调以与我的C库进行交互。
我使用两种不同类型的CFUNCTYPE
对象同时使用不同的API注册两个不同的回调,但我的库在两个API中都获得了相同的函数指针,因此一次回调被调用两次。
我正在尝试做类似下面的事情:
callback_type_1 = ctypes.CFUNCTYPE(ctypes.c_int,
ctypes.c_int,
ctypes.c_void_p,
ctypes.c_int,
ctypes.c_void_p,
ctypes.c_void_p,
ctypes.c_int)
callback_type_2 = ctypes.CFUNCTYPE(None,
ctypes.c_int,
ctypes.c_void_p,
ctypes.c_int,
ctypes.c_int,
ctypes.c_void_p,
ctypes.c_int,
ctypes.c_void_p)
classify_callback_ptr_1 = callback_type_1(callback_1)
_lib.api_1(ctypes.c_int(handle), classify_callback_ptr_1)
classify_callback_ptr_2 = callback_type_2(callback_2)
_lib.api_2(ctypes.c_int(handle), classify_callback_ptr_2)
如果我在api_1和api_2中打印函数指针,我会得到相同的指针值。
ctypes是否只允许一次注册一个回调?或者还有什么我不想要的。