1

这与我的另一个问题有关,但我觉得我应该在一个新问题中提出它。

基本上,FLAC 使用函数指针进行回调,并使用 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 永远不会被程序员实例化,它只是从初始化函数和处理函数中调用。我必须自己编写回调函数,但他的问题是我不知道我该怎么做,所以如果有人知道我应该怎么做,那么一些帮助将不胜感激。

4

2 回答 2

7

根据ctypes 回调文档,您可以定义 python 函数

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

然后创建一个指向 C 可调用函数的指针,如下所示:

callback = write_callback_prototype(my_callback)

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

于 2009-05-17T10:27:01.973 回答
1

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

在这种情况下,只需使用:

import ctypes

class FLAC__Frame(ctypes.Structure):
    pass

并假装它已经被定义了,不要在意,因为你只需要指向它的指针,它基本上是内存中的位置。

于 2009-05-17T11:16:13.463 回答