"waldek" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
On Jul 24, 5:01 pm, Thomas Heller <[EMAIL PROTECTED]> 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?

Try:

cbfunc = CFUNCTYPE(c_int, c_char_p, c_int)

ctypes understands c_char_p as a null-terminated character string and will pass a string to your callback instead of a list of ints.

--Mark

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to