首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

从C中将函数指针传到python

2013-06-25 
从C中将函数指针传入pythonC code:void func(int a, int b){printf(%d%d, a, b)}python codedef xxx(fp

从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
然后怎么传递给py? Py_BuildValue("(O&)",func);

应该不用管咋啥函数指针啦,做wrapper时method table里应该已经用上函数指针啦,脚本里简单import模块调用就是,类似:

import ext_module

ext_module.func(1, 2)

等同

fp = ext_module.func
xxx(fp)
[解决办法]
c部分没必要写在一起,一部分改成扩展方式不是容易实现嘛...
[解决办法]
引用:
C部分个不是ext module,
是一个调用者

难道楼主想要在C里面调用python的函数?
如果仅仅是楼主给出的例子,没有必要使用什么函数指针,c里面包裹一下,编译后python里import一下,就可以在python里使用了。

热点排行