C++调用Python浅析
来源:互联网 发布:喜扑传奇翅膀升级数据 编辑:程序博客网 时间:2024/06/06 03:19
在一个C++应用程序中,我们可以用一组插件来实现一些具有统一接口的功能,一般插件都是使用动态链接库实现,如果插件的变化比较频繁,我们可以使用Python来代替动态链接库形式的插件(堪称文本形式的动态链接库),这样可以方便地根据需求的变化改写脚本代码,而不是必须重新编译链接二进制的动态链接库。灵活性大大的提高了。
通过C++调用Python脚本主要要用到如下的一些Python提供的API,因为实际上C++要调用的是Python的解释器,而Python解释器本质就是实现在动态链接库里面的,因此在调用前和调用后要进行一些初始化和资源释放的工作,另外,要调用Python脚本里面的函数等等东西,需要Python提供的一些特殊API来包装C++调用。(可以参考[2])。
void Py_Initialize(void)
初始化Python解释器,如果初始化失败,继续下面的调用会出现各种错误,可惜的是此函数没有返回值来判断是否初始化成功,如果失败会导致致命错误。
int Py_IsInitialized(void)
检查是否已经进行了初始化,如果返回0,表示没有进行过初始化。
void Py_Finalize()
反初始化Python解释器,包括子解释器,调用此函数同时会释放Python解释器所占用的资源。
int PyRun_SimpleString(const char *command)
实际上是一个宏,执行一段Python代码。
PyObject* PyImport_ImportModule(char *name)
导入一个Python模块,参数name可以是*.py文件的文件名。类似Python内建函数import。
PyObject* PyModule_GetDict( PyObject *module)
相当于Python模块对象的__dict__属性,得到模块名称空间下的字典对象。
PyObject* PyRun_String(const char* str, int start,PyObject* globals, PyObject* locals)
执行一段Python代码。
int PyArg_Parse(PyObject* args, char* format, ...)
把Python数据类型解析为C的类型,这样C程序中才可以使用Python里面的数据。
PyObject* PyObject_GetAttrString(PyObject *o, char*attr_name)
返回模块对象o中的attr_name 属性或函数,相当于Python中表达式语句,o.attr_name。
PyObject* Py_BuildValue(char* format, ...)
和PyArg_Parse刚好相反,构建一个参数列表,把C类型转换为Python对象,使得Python里面可以使用C类型数据。
PyObject* PyEval_CallObject(PyObject* pfunc, PyObject*pargs)
此函数有两个参数,而且都是Python对象指针,其中pfunc是要调用的Python 函数,一般说来可以使用PyObject_GetAttrString()获得,pargs是函数的参数列表,通常是使用Py_BuildValue()来构建。
- C++调用Python浅析
- C++调用python浅析
- C++调用Python浅析
- C++调用Python浅析
- C++调用Python浅析
- C++调用Python浅析
- C++调用Python浅析
- C++调用Python浅析
- 浅析 C++ 调用 Python 模块
- 【C++】【CPR】浅析远程过程调用 RPC
- 浅析c语言的函数调用
- 【C++】【CPR】浅析远程过程调用 RPC
- C语言函数调用栈浅析
- BCB(C++)调用Python
- C中调用PYTHON
- C调用python
- C调用python
- Python 调用 C函数
- max nesting level reach '100'
- Android-动画-矢量动画技巧
- 轻松玩转正则表达式
- Linux学习日志(3)
- 弹出自定义输入框
- C++调用Python浅析
- 读书笔记 effective c++ Item 25 实现一个不抛出异常的swap
- 2014年北京Itcast-IOS4期视频教程
- 打开word2010出现进度条的解决办法
- Codeforces Round #403 (Div. 2)B. The Meeting Place Cannot Be Changed
- 单列
- delphi ini文件的基础读写。
- css之vertical-align
- Thread线程-创建线程的3种方式