Я пытаюсь вызвать функцию C, которая принимает указатель на указатель и перенаправляет его во внутренне размещенный одномерный массив, что-то вроде этой строки:
typedef myStruct {
const char* name;
int status;
} myStruct;
int foo(const myStruct** array, size_t* size);
Я пытаюсь обернутьэто с Python и NumPy, и получить массив NumPy, который оборачивает эту внутреннюю память (только для чтения).
У меня есть следующее:
arr = np.ctypeslib.ndpointer(dtype=np.dtype([('name', np.intp),
('status', np.int)]))()
size = ct.c_size_t()
_call('foo', ct.byref(arr), ct.byref(size))
arr = np.ctypeslib.as_array(arr, shape=(size.value,))
arr.flags.writeable = False # not our memory!
Где _call()
обертка, которая проверяет возвращаемое значение.
Я получаю следующее:
ValueError: '<P' is not a valid PEP 3118 buffer format string
по вызову as_array()
.Что я делаю не так?
РЕДАКТИРОВАТЬ: Моя цель здесь состоит в том, чтобы прочитать данные в виде структурированного массива NumPy, так как я думаю, что это лучший способ описать массив структур Cв питоне.