STINNER Victor <victor.stin...@haypocalc.com> added the comment:

> I just want to call my C function.

You can use something else than ctypes_array.from_buffer(buffer). 
ctypes_array.from_buffer() creates a read-write object which can be used to 
modify the buffer. You cannot pass a read-only object to 
ctypes_array.from_buffer().

> I'm pretty sure that I verified that this code worked in 3.1.3 before
> opening this bug, but it's been a while.

If it was possible, it was a bug. You cannot modify a read-only object, like 
bytes, because it would lead to inconsistent object and may lead your program 
to a crash, even if you don't call C functions.

Example in pure Python:

>>> import ctypes
>>> T=(ctypes.c_uint8*4)
>>> B=bytearray(4)
>>> x=T.from_buffer(B)
>>> B
bytearray(b'\x00\x00\x00\x00')
>>> x[0]=9
>>> x[2]=100
>>> B
bytearray(b'\t\x00d\x00')
>>> list(x)                                                                     
>>>                                                                         
[9, 0, 100, 0]

B is modified when x[index] is modified.

--

A bug tracker is not the right place to ask help with ctypes.

----------
resolution:  -> invalid
status: open -> closed

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue11427>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to