在python中公开C函数并在C中嵌入python

在python中公开C函数并在C中嵌入python,第1张

概述我的应用有一些事件,每个事件都可以有一些动作.这些 *** 作在C中实现.我想将这些核心函数暴露给 python并使用 python来编写动作.优点是我可以修改 *** 作而无需重新编译.例如: CppClass o;// --- this is a action----o.f1();o.f2();// ------------------------ 使用python编写动作脚本: def actio 我的应用有一些事件,每个事件都可以有一些动作.这些 *** 作在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 hellodef 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)
总结

以上是内存溢出为你收集整理的在python中公开C函数并在C中嵌入python全部内容,希望文章能够帮你解决在python中公开C函数并在C中嵌入python所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存