为了方便Python与C之间的交互,在调用C的Callback时,需要传递Python的对象到C中,作为回调函数的user data。
C中,一般user data的类型为void *。因此,在Python中,回调函数类型声明为:
item_cb = CFUNCTYPE( c_void_p, c_void_p )
对应C语言的回调函数:
void ( * item_cb )( void * data, void * user_data );
C中的回调函数注册接口为:
void item_foreach( void * list, item_cb callback, void * user_data );
在Python中,定义回调函数为:
def each_item( item, user_data ):
print( cast( user_data, POINTER( py_object )).contents.value )
#还可以操作这个user_data所指向的对象
cast( user_data, POINTER( py_object )).contents.value += 1
注册回调函数的代码:
value = 0
item_foreach( list, item_cb( each_item ), byref( py_object( value )))
执行后,value的值会在each_item中打印,并且自增1.