用C语言嵌入Python

2024-04-23 16:55:47 发布

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

我想在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回调呢?在


Tags: 方法函数orgapi应用程序httpdocsindex
1条回答
网友
1楼 · 发布于 2024-04-23 16:55:47

这比人们预期的要难,但这是可以做到的。在

如果有一个C函数作为回调函数提供,可以使用PyCFunction_New将其转换为Python可调用函数:

#include <python.h>

static PyObject *my_callback(PyObject *ignore, PyObject *args)
{
  /* ... */
}

static struct PyMethodDef callback_descr = {
  "function_name",
  (PyCFunction) my_callback,
  METH_VARARGS,                 /* or METH_O, METH_NOARGS, etc. */
  NULL
};

static PyObject *py_callback;

...
py_callback = PyCFunction_New(&callback_descr, NULL);

如果您想在运行时选择不同的回调,例如提供一个将C回调函数转换为Python回调的通用c_to_python函数,那么这种方法就行不通了。在这种情况下,您需要用它自己的tp_call实现一个扩展类型。在

^{pr2}$

这段代码被简单地扩展为也接受user_data指针;只需将用户数据存储在CallbackObject结构中。在

相关问题 更多 >