Python ctypes回调函数的结果类型无效

Python ctypes回调函数的结果类型无效,python,ctypes,Python,Ctypes,我在使用ctypes实现时遇到了一个问题。我有两个C函数: antichain** decompose_antichain(antichain*, int, char (*)(void*, void*), void** (*)(void*)); counting_function** decompose_counting_function(counting_function*); 其中反链和计数函数是两种结构。反链可以看作是一个集合,包含未知类型的元素(在本例中为计数函数)。decompose

我在使用ctypes实现时遇到了一个问题。我有两个C函数:

antichain** decompose_antichain(antichain*, int, char (*)(void*, void*), void** (*)(void*));
counting_function** decompose_counting_function(counting_function*);
其中反链和计数函数是两种结构。反链可以看作是一个集合,包含未知类型的元素(在本例中为计数函数)。decompose_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))
最后一行生成错误:回调函数的结果类型无效


我看不出问题出在哪里。有人能帮我吗?谢谢

您需要确保argtypes和result类型匹配。看起来您交换了decompose_antichain_c的参数类型。在argtypes中有
DECOMPOSE\u COUNTING\u FUNCTION\u FUNC,COMPARE\u COUNTING\u FUNCTIONS\u FUNC
,这与上面给出的C函数声明不匹配。然后,首先尝试使用
COMPARE\u COUNTING\u FUNCTIONS\u FUNC
调用它,然后尝试使用
DECOMPOSE\u COUNTING\u FUNCTION\u FUNC
调用它

DECOMPOSE\u COUNTING\u FUNCTION\u FUNC
看起来也有问题。它可能是
CFUNCTYPE(指针(c\u void\u p),c\u void\u p)
只是从代码的其余部分猜测

如果您提供创建
COMPARE\u COUNTING\u FUNCTIONS\u FUNC
CountingFunction