从C中将函数指针传到python
从C中将函数指针传入python
C code:
void func(int a, int b){printf("%d%d", a, b);}
python code
def xxx(fp):
fp(1,2)
想通过
Py_BuildValue 将函数指针传入python代码, 试过Py_BuildValue("(O&)",func);
还是不行.
请问大牛 应该怎么弄?
------解决方案--------------------
没弄过,应该得封装成一个对象返回吧
------解决方案--------------------
1. 一般来说你不能传一个普通的C函数。你自己的C函数要符合类似下面的接口:
static PyObject*
func(PyObject *self, PyObject *args)
{
if(!PyArg_ParseTuple(args, ":numargs"))
return NULL;
return Py_BuildValue("i", numargs);
}
2. 如果你想重用现有的C代码,可以用上面的办法做一个简单的wrapper,或者使用ctypes。
------解决方案--------------------
应该不用管咋啥函数指针啦,做wrapper时method table里应该已经用上函数指针啦,脚本里简单import模块调用就是,类似:
import ext_module
ext_module.func(1, 2)
等同
fp = ext_module.func
xxx(fp)
------解决方案--------------------
c部分没必要写在一起,一部分改成扩展方式不是容易实现嘛...
------解决方案--------------------
难道楼主想要在C里面调用python的函数?
如果仅仅是楼主给出的例子,没有必要使用什么函数指针,c里面包裹一下,编译后python里import一下,就可以在python里使用了。
C code:
void func(int a, int b){printf("%d%d", a, b);}
python code
def xxx(fp):
fp(1,2)
想通过
Py_BuildValue 将函数指针传入python代码, 试过Py_BuildValue("(O&)",func);
还是不行.
请问大牛 应该怎么弄?
------解决方案--------------------
没弄过,应该得封装成一个对象返回吧
------解决方案--------------------
1. 一般来说你不能传一个普通的C函数。你自己的C函数要符合类似下面的接口:
static PyObject*
func(PyObject *self, PyObject *args)
{
if(!PyArg_ParseTuple(args, ":numargs"))
return NULL;
return Py_BuildValue("i", numargs);
}
2. 如果你想重用现有的C代码,可以用上面的办法做一个简单的wrapper,或者使用ctypes。
------解决方案--------------------
应该不用管咋啥函数指针啦,做wrapper时method table里应该已经用上函数指针啦,脚本里简单import模块调用就是,类似:
import ext_module
ext_module.func(1, 2)
等同
fp = ext_module.func
xxx(fp)
------解决方案--------------------
c部分没必要写在一起,一部分改成扩展方式不是容易实现嘛...
------解决方案--------------------
难道楼主想要在C里面调用python的函数?
如果仅仅是楼主给出的例子,没有必要使用什么函数指针,c里面包裹一下,编译后python里import一下,就可以在python里使用了。