ctypes недопустимый тип результата для функции обратного вызова

У меня возникла проблема при реализации с ctypes. У меня есть 2 функции C:

antichain** decompose_antichain(antichain*, int, char (*)(void*, void*), void** (*)(void*));
counting_function** decompose_counting_function(counting_function*);

где antichain и counting_function - две структуры. Антицепь можно рассматривать как набор, содержащий элементы неизвестного типа (в этом примере counting_function). Функция decopose_antichain принимает в качестве аргумента (среди прочего) функцию, используемую для декомпозиции элементов, содержащихся в антицепи (-> функция, прототипом которой является void ** (*) (void *)).

Теперь я бы нравится использовать decopose_antichain из Python. Я использовал ctypes:

lib = cdll.LoadLibrary("./mylib.dylib")
#CountingFunction, Antichain and other definitions skipped
DECOMPOSE_COUNTING_FUNCTION_FUNC = CFUNCTYPE(POINTER(c_void_p), POINTER(CountingFunction))
decompose_counting_function_c = lib.decompose_counting_function
decompose_counting_function_c.argtypes = [POINTER(CountingFunction)]
decompose_counting_function_c.restype = POINTER(c_void_p)
decompose_antichain_c = lib.decompose_antichain
decompose_antichain_c.argtypes = [POINTER(Antichain), c_int, DECOMPOSE_COUNTING_FUNCTION_FUNC, COMPARE_COUNTING_FUNCTIONS_FUNC]
decompose_antichain_c.restype = POINTER(POINTER(Antichain))

(...)

antichains_list = decompose_antichain_c(antichain, nb_components, COMPARE_COUNTING_FUNCTIONS_FUNC(compare_counting_functions_c), DECOMPOSE_COUNTING_FUNCTION_FUNC(decompose_counting_function_c))

Последняя строка выдает ошибку: недопустимый тип результата для функции обратного вызова.

Я не вижу, откуда возникла проблема. Может кто-нибудь помочь мне? Спасибо

8
задан Naked 1 June 2011 в 11:21
поделиться