On Sunday 19 September 2010, it occurred to Carl Banks to exclaim: > I am creating a ctypes buffer from an existing non-ctypes object that > supports buffer protocol using the following code: > > > from ctypes import * > > PyObject_AsReadBuffer = pythonapi.PyObject_AsReadBuffer > PyObject_AsReadBuffer.argtypes = > [py_object,POINTER(c_void_p),POINTER(c_size_t)] > PyObject_AsReadBuffer.restype = None > > def ctypes_buffer_from_buffer(buf): > cbuf = c_void_p() > size = c_size_t() > PyObject_AsReadBuffer(buf,byref(cbuf),byref(size)) > return cbuf >
If I understand what you are doing correctly, you're referencing a Python buffer object and returning a pointer wrapped in some ctypes thingy. hmm. I see some problems in your code: * You're not passing the size along. In the name of sanity, why on earth not?! The pointer cannot be safely used without knowing how long the area of memory referenced is! * You're using the old buffer protocol. You might rather implement this with the one introduced with Python 3.0, and supported in 2.6 as well. > > It works, but is there a standard way to do this in ctypes? I > couldn't find anything in the documentation. Python 2.6 for now. > Thanks. > > > Carl Banks -- http://mail.python.org/mailman/listinfo/python-list