Ctypes多函数回调

时间:2013-12-17 23:20:50

标签: python python-2.7 ctypes

我遇到了一个问题,即使用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是否只允许一次注册一个回调?或者还有什么我不想要的。

0 个答案:

没有答案