在python中公开C函数并在C中嵌入python
我的应用有一些事件,每个事件都可以有一些动作.这些操作在C中实现.我想将这些核心函数暴露给 python并使用 python来编写动作.优点是我可以修改操作而无需重新编译.例如: CppClass o; // --- this is a action---- o.f1(); o.f2(); // ------------------------ 使用python编写动作脚本: def action1(o): o.f1() o.f2() 在c中,使用解释器来运行此脚本,找到action1并使用从c对象转换的PyObject调用它.实际上,我没有公开f1()& f2()到python,我只是用python重组动作的定义,所有函数都是用c二进制代码运行的.请注意,我没有给出f1()&的定义. python中的f2(). 问题是:我如何公开全局函数?如: def action2(): gf1() gf2() boost :: python可以公开函数,但它不同,它需要编译一个DLL文件而main()属于python脚本.当然我可以使全局函数成为类静态成员,但我只是想知道.请注意,我必须给出gf1()&的定义. python中的gf2(). Jython可以很容易地做到这一点:只需在python代码中导入Xxx并调用Xxx.gf1()即可.但是在cython中,我如何在python中定义gf1()?这是一种扩展,但扩展需要提前编译Xxx.似乎只有将gf()变成一个类? 解决方法解决了. boost :: python的doc真的很差……例如:公开函数 void ff(int x,int y) { std::cout<<x<<" "<<y<<std::endl; } 到python: import hello def foo(x,y) hello.ff(x,y) 你需要将它作为模块公开: BOOST_PYTHON_MODULE(hello) { boost::python::def("ff",ff,boost::python::arg("x"),boost::python::arg("y")); } 但这仍然不是一个’全局函数’,所以将它暴露给python的主要范围: BOOST_PYTHON_MODULE(__main__) { boost::python::def("ff",boost::python::arg("y")); } 然后你可以写: def foo(x,y) ff(x,y) (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |