Tengo un problema al implementar con ctypes. Tengo 2 funciones C:ctypes tipo de resultado no válido para una función de devolución de llamada
antichain** decompose_antichain(antichain*, int, char (*)(void*, void*), void** (*)(void*));
counting_function** decompose_counting_function(counting_function*);
donde antichain y counting_function son dos estructuras. Un antichain se puede ver como un conjunto, que contiene elementos de tipo desconocido (en este ejemplo, función de contar). La función decompose_antichain toma como argumento (entre otras cosas) la función que se utiliza para descomponer los elementos que contiene el antichain (-> una función cuyo prototipo es nulo ** (*) (void *)).
Ahora me gustaría usar decompose_antichain de Python. Usé 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))
La última línea produce el error: tipo de resultado no válido para una función de devolución de llamada.
No puedo ver de dónde viene el problema. ¿Alguien puede ayudarme? Gracias