ctypes and reading value under pointer passed as param of a callback

waldek waldemar.rymarkiewicz at gmail.com
Fri Jul 25 04:06:32 EDT 2008


On Jul 24, 5:01 pm, Thomas Heller <thel... at python.net> wrote:
> waldekschrieb:
>
> > Hi,
>
> > I'm using C dll with py module and wanna read value (buffer of bytes)
> > returned in py callback as parameter passed to dll function.
>
> The callback receives a pointer instance.  You can dereference the pointer
> to read individual bytes in this way:
>    print data[0], data[5], data[42]
> or use slicing to read a bunch of bytes:
>    print data[0:42]
>
> So, you probably want something like this:
>
> > --------------------------------------------------
> > def  mycallback(data, size):
> >     # how to read data buffer here ?
>
>       print data[:size]
>
> >     return 0
>
> > cbfunc = CFUNCTYPE(c_int, POINTER(c_uint8), c_int)
>
> > mydll = cdll.somedll
> > mdll.foo(cbfunct)
> > ---------------------------------------------------------------
>
> > Question: How to get bytes from the buffer passed to mycallback ???
> > Let's assume that the buffer consist of 4 bytes 4 bytes 8 bytes.
>
> > I tried unpack("ii8s", data[0]) and nothing. I tried different ctypes
> > passed to callback and nothing.
>
> Thomas

Cool, works fine now.

... and how to convert a list of bytes to py string or int ??

i.e
data[:4] -> py int
data[4:8] -> py int
data[8:] -> py strng

I tried unpack and unpack_from but the buff should be an string or
buffer not a list of bytes as data is.

any suggestions?



More information about the Python-list mailing list