Kos*_*Kos 8 python buffer ctypes const python-2.7
如果我有一个可写的buffer
,我可以使用ctypes.c_void_p.from_buffer
函数来获得一个指向这个缓冲区的C指针.
但是,如何处理不可写的缓冲区呢?如何形成一个const
指针,我可以传递给C代码,该代码期望const void*
不使用不可写缓冲区的可写副本?
我考虑过c_void_p.from_address
但缓冲区(和内存视图)似乎没有公开它们的地址.
一些澄清:
>>> import ctypes
>>> b = buffer("some data that supports the buffer interface, like a str")
>>> ptr = ctypes.c_void_p.from_buffer(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: buffer is read-only
>>> ptr = ctypes.c_void_p.from_buffer_copy(b) # works, but has to copy data
>>> ptr = ctypes.CONST(c_void_p).from_buffer(b) # (I'm making this one up)
>>> ptr = ctypes.c_void_p.from_address(???) # could work; how to get addr?
Run Code Online (Sandbox Code Playgroud)
这将适用于void some_api(const void* read_only_data)
:
>>> ctypes.cdll.LoadLibrary(some_lib).some_api(ptr)
Run Code Online (Sandbox Code Playgroud)
该方法from_buffer_copy
有效,但需要先复制缓冲区.我正在寻找解决缓冲区可写性要求的方法,因为没有人会在那里写,我想避免冗余的数据复制.