[EMAIL PROTECTED] wrote: > How does one transfer a buffer object from python -> c and back again > (assuming the data gets modified)? > I can't seem to get this or anything else to work, but am clueless as > to what I'm doing wrong > > > using namespace boost::python;
Looks like C++, not C. > > static PyObject * proc_buf(PyObject *self, PyObject *args) { [I'm not familiar with the boost gadget, but ...] Doesn't "static" mean that this function is *not* externally visible? > PyObject *resultobj; > char* output_samples; > int len; > if (!PyArg_ParseTuple(args,"s#|l",&output_samples, &len)) { You have made the length an optional argument, but not initialised the receiving variable "len". Nothing to do with your current problem, but highly dangerous. > return NULL; /* wrong arguments provided */ > } > for (int i=0;i<len;i++) { > output_samples[i] *= 2; // for example > } This is updating the internal representation of the input in situ. Not a very good idea at all. Take a copy. Return the updated copy. > resultobj = PyString_FromStringAndSize(output_samples, len); > return resultobj; > } > > > This compiles ok, but when in python I do > Put print repr(bufx), type(bufx) here so that we're all clued in on what you are talking about. You say "transfer a buffer object" but your C[++] is returning a string object. > buf = proc_buf( bufx, len(bufx) You are missing both a module name and a ")" here. It should look something like: buf = theextensionmodule.proc_buf( bufx, len(bufx)) Please *always* copy/paste the actual code that you executed. > len(buf) > > I get > len() of unsized object Please *always* copy/paste the actual error message & stack trace that you get. Try print repr(buf), type(buf) here; it might give you a clue as to what type of object you have that is unsized. On the surface this is a mystery, as (based on the info that you have supplied), "buf" should be a string. HTH .... alternatively come up a level or three and tell us what your basic requirement is; maybe it can be solved more easily in Python or Pyrex. Cheers, John -- http://mail.python.org/mailman/listinfo/python-list