Python的点点滴滴(Use a Python Object as User Data of C Callback)

为了方便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.

 

你可能感兴趣的:(Python的点点滴滴(Use a Python Object as User Data of C Callback))