Объекты Python как userdata в функциях обратного вызова ctypes

Функция Cmyfunc работает на большей части данных. Результаты возвращаются кусками в функцию обратного вызова:

int myfunc(const char *data, int (*callback)(char *result, void *userdata), void *userdata);

С помощьюctypesнет ничего страшного в звонкеmyfunc из кода Python, и чтобы результаты возвращались в функцию обратного вызова Python. Этот обратный вызов работает нормально.

myfunc = mylib.myfunc
myfunc.restype = c_int
myfuncFUNCTYPE = CFUNCTYPE(STRING, c_void_p)
myfunc.argtypes = [POINTER(c_char), callbackFUNCTYPE, c_void_p]

def mycb(result, userdata):
    print result
    return True

input="A large chunk of data."
myfunc(input, myfuncFUNCTYPE(mycb), 0)

Но есть ли способ передать объект Python (скажем, список) в качестве пользовательских данных для функции обратного вызова? Чтобы сохранить фрагменты результата, я хотел бы сделать, например:

def mycb(result, userdata):
    userdata.append(result)

userdata=[]

Но я понятия не имею, как привести список Python к c_void_p, чтобы его можно было использовать при вызове myfunc.

Мой текущий обходной путь - реализовать связанный список как структуру ctypes, что довольно громоздко.

Ответы на вопрос(1)

Ваш ответ на вопрос