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

Thomas Heller theller at python.net
Thu Jul 24 11:01:28 EDT 2008


waldek schrieb:
> 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



More information about the Python-list mailing list