Python Ctypes and Function Pointers

2024-06-01 12:11:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

我遇到的问题是执行。FLAC}u Frame从来没有被程序员实例化过,它只是从初始化函数和处理函数中调用的,我必须自己编写回调函数,但他的问题是我不知道该怎么做,所以如果有人知道我该怎么做,那就非常感谢你的帮助。


Tags: 函数myctypes结构frame原型prototypequestion
2条回答

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

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

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

callback = write_callback_prototype(my_callback)

这个函数指针可以被传递到FLAC中

The problem that I have is the implementation. FLAC__Frame is never instantiated by the programmer, it's only called from from the initialization function, and the processing functions.I have to write the callback function myself, but he problem is that I don't know how I would do this, so if anyone knows how I should do this, then some help would be greatly appreciated.

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

import ctypes

class FLAC__Frame(ctypes.Structure):
    pass

假设它已经定义好了,不要在意,因为您只需要指向它的指针,它基本上就是内存中的位置。

相关问题 更多 >