我在使用ctypes实现时遇到问题。我有2个C函数:回调函数的ctypes无效结果类型
antichain** decompose_antichain(antichain*, int, char (*)(void*, void*), void** (*)(void*));
counting_function** decompose_counting_function(counting_function*);
其中antichain和counting_function是两个结构。 antichain可以看作一个集合,包含未知类型的元素(在这个例子中是counting_function)。 decompose_antichain函数作为参数(除别的以外)用来分解antichain包含的元素( - >原型为void **(*)(void *))的函数。
现在我想从Python中使用decompose_antichain。我用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))
最后一行产生错误:回调函数的结果类型无效。
我看不出问题来自哪里。谁能帮我?谢谢