【发布时间】:2012-11-23 23:03:53
【问题描述】:
我想在 C 应用程序中使用基于事件的 Python 库。我使用官方 C-API 嵌入 Python:http://docs.python.org/2/c-api/index.html#c-api-index
从 C 中调用方法并收集返回值是没有问题的。但是,我不知道如何执行以下操作:
几个 python 库函数将我认为是 python 函数指针作为参数。
当从 C 调用这些方法时,是否可以传递一个 C 函数指针,以便 Python 函数使用 C 函数作为回调?
如果没有,如何让 Python 使用 C 回调?
【问题讨论】:
-
见stackoverflow.com/questions/6626167/…(需要合并;模组点数不足)。
-
@ecatmur 链接的答案不正确。
methd必须是静态分配的,因为PyCFunction保留了一个指向所提供的PyMethodDef的指针,并在以后使用它来检索 C 函数和标志。答案中的代码会自动分配PyMethodDef,这会在调用生成的Python函数时导致崩溃。 -
@user4815162342:在链接的答案中,我认为 Manux 只是展示了该过程的概述。 IMO 有点傻,Manux 使用函数名作为模块名,而不仅仅是
NULL。在实际代码中,我假设PyMethodDef是在堆上分配的。 -
@eryksun 也许应该澄清答案,注意
PyMethodDef应该分配在堆上。这引发了后续问题,即何时以及如何释放动态分配的PyMethodDef。我的回答,通过一些初始投资,很好地解决了这个问题。 -
您好,我在这篇帖子下提供了一个很好的例子stackoverflow.com/a/46441794/5842403
标签: python c python-2.7