如何在Python中创建CFuncType

10 投票
1 回答
12243 浏览
提问于 2025-04-15 22:07

我需要传递一个回调函数,这个函数的类型是 CFuncType(比如 ctypes.CFUNCTYPE 或 ctypes.PYFUNCTYPE 等等)。

我该怎么把一个 Python 函数转换成 CFuncType,或者我该怎么在 Python 中创建一个 CFuncType 的函数呢?

1 个回答

12

我忘了ctypes有多厉害了:

以下内容摘自 http://docs.python.org/library/ctypes.html

我们的回调函数会接收指向整数的指针,并且必须返回一个整数。首先,我们需要为回调函数创建一个类型:

CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))

在回调函数的第一次实现中,我们只是打印出接收到的参数,然后返回0(逐步开发;-):

 def py_cmp_func(a, b):
     print "py_cmp_func", a, b
     return 0

创建可以被C语言调用的回调函数:

cmp_func = CMPFUNC(py_cmp_func)

撰写回答