[Pyrex] Callback with bound method

ha shao hashao2 at myrealbox.com
Wed Jul 7 21:52:51 CEST 2004


It seems that the recommend way of wrapping callbacks is using bound
methods. By my attempt to do it failed:


ctypedef void (*cbfunc)(void *userdata)
cdef extern void add_cb(cbfunc cb, void *data)

cdef class CBClass:
    cdef object _callback
    def __init__(self, callback):
        self._callback = callback
    cdef void action(self, void *userdata):
        self._callback(<object>userdata)

def addhook(acb, adata):
    cdef CBClass cbobj
    cbobj = CBClass(acb)
    add_cb(cbobj.action, <void*> adata)

The above code will cause pyrexc to spit out:
    test.pyx:14:16: C method can only be called
    test.pyx:14:16: Cannot assign type 'void ((struct
    __pyx_obj_4test_CBClass *,void (*)))' to 'void ((*)(void (*)))'

Did I misunderstood something? The version is 0.9.2.1





More information about the Pyrex mailing list