[EMAIL PROTECTED] wrote: > Greetings, > > I'm trying to wrap a function in a C library as a compiled C Python > module. Everything is going great, but I've hit a snag. There's a > function in the form of this: > > First the typedef: > typedef void(*FPtr_DeviceMessageHandler) (const DeviceMessage, const > char*); > > Then the actual function prototype: > FPtr_DeviceMessageHandler > RegisterDeviceMessageHandler(FPtr_DeviceMessageHandler); > > Whenever this USB device I'm using generates a message, it's then sent > to that function whose reference you passed to > RegisterDeviceMessageHandler(). Here's an example: > > void testfunc() { > printf("test"); > } > ...on to main() > RegisterDeviceMessageHandler(&testfunc) > > So I've defined a similar function on my C module to do just this, > using the passed function reference to allow the device to send > messages to a Python function of the user's choice. I'm just not sure > how to do this, and the tutorials I've been digging through don't > offer any help. I've found some functions that look promising, but > can't figure out how to cast the function reference from Python into > something the C RegisterDevice... function can handle. Here's what > I've got: > > static PyObject * > Py1_RegisterDeviceMessageHandler(PyObject *self, PyObject *args) > { > PyObject *handle, *parsed; > > if(!PyArg_ParseTuple(args, "O", handle)) { > return NULL; > } > > parsed = PyMethod_Function(handle); > I1_RegisterDeviceMessageHandler(PyMethod_Function(handle)); > > Py_RETURN_TRUE; > } // end Py1_RegisterDeviceMessageHandler() > > This fails since PyMethod_Function returns a PyObject. Is there a way > to cast this to something generic? Casting to (void*) didn't seem to > work. > > Thanks in advance!
May I suggest you move to ctypes for wrapping? It's easier, pure python and callbacks are already built-in. Diez -- http://mail.python.org/mailman/listinfo/python-list