"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