Skip to main content
 首页 » 编程设计

Python ctypes 和函数指针

2025年05月04日19del

这与 my other question 有关, 但我觉得我应该在一个新问题中提出这个问题。

基本上 FLAC 使用函数指针进行回调,并使用 ctypes 实现回调,您使用 CFUNCTYPE 对其进行原型(prototype)设计,然后使用 prototype() 函数创建他们。

我遇到的问题是,我想我会这样创建我的回调函数(我没有显示我重新创建的结构,FLAC__Frame 是一个结构):

write_callback_prototype = CFUNCTYPE(c_int, c_void_p,  
                                     POINTER(FLAC__Frame),  
                                     POINTER(c_int32), v_void_p)

我遇到的问题是实现。 FLAC__Frame 从来没有被程序员实例化,它只是从初始化函数和处理函数中调用。我必须自己编写回调函数,但他的问题是我不知道我会怎么做,所以如果有人知道我应该怎么做,那么一些帮助将不胜感激。

请您参考如下方法:

根据ctypes callback docs你可以定义 python 函数

def my_callback(a, p, frame, p1, p2) 
    pass 

然后像这样创建一个指向 C 可调用函数的指针:

callback = write_callback_prototype(my_callback) 

然后可以将此函数指针传递到 FLAC