Python C扩展回调函数

时间:2014-08-07 13:19:14

标签: python c binding callback

我正在尝试编写一个绑定到使用回调函数的C-Library。

功能界面可能如下所示:

int do_something(int a, void (*callback));

我想在python中以相同的方式映射它,所以有人可以写:

def callback(val):
    print val

do_something(1, callback)

因此Python调用do_something应该调用C函数do_something。 Python函数callback应该连接到C函数callback

我该如何处理?

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

最简单的方法应该是为每个C函数定义一个Python Wrapper并使用它们。由于C函数不能直接作为Python Callable,这是一种很好的打包方式。

另一种方法应该是在C扩展中定义自己的类,其中包括方法调用。通过这个C Python函数,您可以管理您想要的任何内容并执行与C函数回调的连接。该对象成为通用回调或子类,或......

如果你想保持C级别的所有内容,那么使用Python Capsules来传递C函数指针。但是回调是在C级而不是Python级。

更确切地说,您需要提供有关回调类型,数量,种类,域等的更多信息。我无法想到实现目标的通用方法,但我可以想象各种场景和实现。