Указатель const void* в ctypesPython

Программы на Python
Anonymous
Указатель const void* в ctypes

Сообщение Anonymous »

Если у меня есть записываемый буфер, я могу использовать функцию ctypes.c_void_p.from_buffer для получения указателя C на этот буфер.

А как быть с незаписываемыми буферами? Как сформировать указатель const, который я могу передать коду C, ожидающему константу 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 "", line 1, in 
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?
Это будет работать с void some_api(const void* read_only_data), например:

Код: Выделить всё

>>> ctypes.cdll.LoadLibrary(some_lib).some_api(ptr)
Метод с from_buffer_copy работает, но сначала необходимо скопировать буфер. Я ищу способ обойти требование о возможности записи в буфер, потому что никто не будет туда писать, и я хочу избежать избыточного копирования данных.

Подробнее здесь: https://stackoverflow.com/questions/138 ... -in-ctypes

Вернуться в «Python»