小结c++中使用python时的互调
来源:互联网 发布:ug编程教程百度云盘 编辑:程序博客网 时间:2024/04/29 18:35
C++ 调用python
C++调用python接口,对于c++方来说,需要python提供其c接口;对于python来说,需要理解c++参数。
Python作为一个脚本语言,首先要在c中初始化生成解析器:
Py_Initialize()
一个Python脚本对应一个包,接下来将需要的脚本加载到解析器:
PyObject *pModule = PyImport_Import();
获取脚本中需要调用的方法对象:
PyObject *pFunc = PyObject_GetAttrString(pModule,funName);
调用方法:
PyObject *pValue = PyObject_CallObject(pFun, pParams);
可以看到python返回值都是指针,可以推出2点:(1)python虚拟机运行在c进程之中;(2)虚拟机和c共享了同一进程空间数据,对象由谁释放?由python虚拟机在释放。根据谁拥有谁释放, python方法中产生的对象,得由它自己来释放。
Python 回调c++
这里说的python回调C++,是在上面一的基础之上的。比如,C++调用了python某个接口,而这个接口需要通过回调C++的方式打日志。
Python如何理解C++接口?将C++对象转成pythonmodule
server = Py_InitModule("server", server_methods);
PyObject_SetAttrString(server, "Myclass",PyDict_New());
之后,python脚本中通过引用该包,就可以像使用普通包一样使用了。
关于Py_INCREF() 和Py_DECREF()
关于Py_INCREF() 和Py_DECREF()在C中何时使用,这个比较麻烦参考
http://blog.sina.com.cn/s/blog_7d9e524a0100x6sx.html
我的理解是这样:
1.C调用python接口返回的对象(PyObject_CallObject返回),都是新生成的,只有C中会用,因此用完之后需要Py_DECREF().
2.通过Pyxx_Getxx()取到的对象,说明是已经存在的对象,存在共用的情况,因此需要Py_INCREF(),用完之后Py_DECREF().
3.对于借用的返回很容易出问题,可以统一按2处理。
4.对于python回调C时,传入的对象指针,不用管,因为C回调任然在Python方法之类,而python是自动管理内存的。
- 小结c++中使用python时的互调
- python中logging包的使用小结
- 使用c语言调用python小结
- 使用c语言调用python小结
- 使用c语言调用python小结
- C语言中二维数组做参数的使用小结
- C中const的 小结
- 小结两种在Python中导入C语言扩展库的方法
- 小结两种在Python中导入C语言扩展库的方法
- 小结两种在Python中导入C语言扩展库的方法
- 小结两种在Python中导入C语言扩展库的方法
- Python中常见的数据类型小结
- Python中遇到的错误小结
- python中一些常用的module小结
- Python中assert函数的用法小结
- C中使用python函索
- C语言中static的用法小结
- C中Static的用法小结
- js操作select大全
- 【算法】快排算法实现
- POJ 1753
- 黑马程序员 Java高新技术五
- 一些数组的注意事项!
- 小结c++中使用python时的互调
- POJ 3126 Prime Path (BFS)
- ubuntu 默认的显卡驱动
- opencv 读取视频帧的数据函数
- java中类的问题!
- STM32407入门笔记
- java的中的entend!
- opencv 读取视频以及灰度化
- Repeater序号问题