Адрес указателя Python для uint_64 в упакованной структуре с использованием ctypes? - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь получить полную реализацию "только для Python" * конкретного ioctl.

Это включает создание упакованной структуры. Структура C-Equivalent не имеет типизированных указателей, а хранит адреса указателей как 64-разрядные целые числа без знака. В буфере, указанном по этим адресам, будут храниться данные возврата из вызова. В настоящий момент я пытаюсь заставить упакованную структуру правильно построить.

В качестве нерабочего примера

ret_buf = ctypes.create_string_buffer(4096)
struct.pack("I", ctypes.POINTER(ret_buf))

Это жалуется на то, что аргумент не является целым числом. Варианты использования по ссылке, c_char_p и т. Д. Также не работают.

Есть ли способ получить адрес, возвращаемый как целое число? Или аналогично серии приведений, которые могут сработать?

* Я знаю, что мы могли бы сделать это с помощью C-Bindings и некоторых оболочек, но, если это возможно, мы бы хотели сохранить в Python столько же, сколько и мыможет упростить процесс сборки и интеграции.

1 Ответ

0 голосов
/ 10 октября 2019

Возможно использовать addressof, который

Возвращает адрес буфера памяти в виде целого числа.

...