Python ctypes 和函数指针
这和我之前提到的另一个问题有关,但我觉得应该单独问一下。
简单来说,FLAC使用函数指针来处理回调,而要在Python中用ctypes实现这些回调,你需要用CFUNCTYPE
来定义它们的格式,然后用prototype()
函数来创建它们。
我遇到的问题是,我想创建我的回调函数(这里不展示我重建的结构体,FLAC__Frame是一个结构体):
write_callback_prototype = CFUNCTYPE(c_int, c_void_p,
POINTER(FLAC__Frame),
POINTER(c_int32), v_void_p)
我遇到的问题在于实现部分。FLAC__Frame并不是由程序员直接实例化的,它只是在初始化函数和处理函数中被调用。我需要自己编写回调函数,但我不知道该怎么做。如果有人知道该怎么做,帮忙指点一下就太好了。
2 个回答
1
我遇到的问题是实现方面的。FLAC__Frame这个东西程序员是不会自己创建的,它只会在初始化函数和处理函数中被调用。我需要自己写一个回调函数,但问题是我不知道该怎么做。如果有人知道该怎么做的话,帮帮我就太感谢了。
在这种情况下,你只需要使用:
import ctypes
class FLAC__Frame(ctypes.Structure):
pass
然后假装它已经定义好了,不用太在意,因为你只需要一个指向它的指针,简单来说就是内存中的一个位置。
7
根据ctypes回调文档,你可以定义一个Python函数
def my_callback(a, p, frame, p1, p2)
pass
然后可以像这样创建一个指向C语言可调用函数的指针:
callback = write_callback_prototype(my_callback)
这个函数指针可以传递给FLAC使用。