python如何调用cpp文件的接口函数_C++中嵌入Python调用
python嵌入到C++中
把python嵌入的C++里面需要做一些步骤
安装python程序,这样才能使用python的头文件和库
在我们写的源文件中增加“Python.h”头文件,并且链入“python**.lib”库(还没搞清楚这个库时静态库还是导出库,需要搞清楚)
掌握和了解一些python的C语言api,以便在我们的c++程序中使用
常用的一些C API函数
在了解下面的函数之前有必要了解一下**PyObject***指针,python里面几乎所有的对象都是使用这个指针来指示的。
Py_Initialize()&&Py_Finalize()
在调用任何python的c函数之前需要调用的函数,“Py_Initialize”是用来初始化python模块的,推测是加载初始化加载dll的。对应的在使用python模块之后用“Py_Finalize”来释放模块。
PyImport_ImportModule()
用来载入一个python模块,这个模块就是一般的python文件。这里需要注意的是,在加载这个模块的时候会执行模块里面所有可以执行的语句。包括import导入语句和在函数体之外的所有语句
PyObject_GetAttrString()
返回模块里面的函数
Py_BuildValue()
建立一个参数元组,一般都是用这个函数来建立元组,然后将这个元组作为参数传递给python里面的函数。
PyEval_CallObject()
调用函数,并把“Py_BuildValue”建立的元组作为参数传递给被调用的函数
源码实例
下面的实例是在c++代码中调用Python的函数,传递参数并且获取返回值
test.cpp代码
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
Py_Initialize(); //初始化
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
PyObject* pParam = NULL;
PyObject* pResult = NULL;
const char* pBuffer = NULL;
int iBufferSize = 0;
pModule = PyImport_ImportModule(“test_python");
if (!pModule)
{
cout << "get module failed!" << endl;
exit (0);
}
pFunc = PyObject_GetAttrString(pModule, "main");
if (!pFunc)
{
cout << "get func failed!" << endl;
cout << int(pFunc) << endl;
exit (0);
}
pParam = Py_BuildValue("(s)", "HEHEHE");
pResult = PyEval_CallObject(pFunc,pParam);
if(pResult)
{
if(PyArg_Parse(pResult, "(si)", &pBuffer, iBufferSize))
{
cout << pBuffer << endl;
cout << iBufferSize << endl;
}
}
Py_DECREF(pParam);
Py_DECREF(pFunc);
Py_Finalize();
//cout << "hello" << endl;
return 0;
}
test_python.py代码
def main(szString):
return ("hello", 5)
python如何调用cpp文件的接口函数_C++中嵌入Python调用相关推荐
- python c++情侣网名是什么意思_c++中嵌入python 看什么意思
展开全部 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ...
- python如何定义带有可选参数的函数_python中如何正确调用带可选参数的函数
我是python的初学者,遇到了一个需要可选参数的函数的问题. 此函数获取可变数量的文件路径作为参数,可以是2到n个参数. 之后,一定数量的可选参数可以传递给这个函数. 我试过做这样的事:def co ...
- java 调用cpp_java jni 调用cpp文件中的方法 | 学步园
这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...
- python 装饰器实践,实现定时函数和失败异常重复调用
python 装饰器实践,实现定时函数和失败异常重复调用 执行请求或函数,出现异常情况下指定重复执行次数 可以作为一个包调用 方法 get()和post 做请求,execcunt = 指定请求失败再次 ...
- 如何调用其他文件的static函数
方法: include 目标static函数的.c文件 通过函数包住static函数,另一文件调这个函数 通过static的地址调用 优点 可能是为了兼容性这么玩, 缺点 如果一个大工程这样写,文件会 ...
- jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题
在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb.而.ipynb文件并不能简单的import进.py或者.ipynb文件中 ...
- python嵌入到程序_在应用中嵌入Python:转
前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更合适的功能.这可以有很多 ...
- 在应用中嵌入Python
翻译: gashero 前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更 ...
- 在应用中嵌入Python - lf8289的专栏 - CSDNBlog
在应用中嵌入Python - lf8289的专栏 - CSDNBlog " 在应用中嵌入Python收藏 新一篇: 软件在线升级设计方案及演变过程分析 | 旧一篇: 在windows下面关闭 ...
最新文章
- Django视图之HttpRequest对象和HttpResponse对象
- CF650C Table Compression
- 字符数组和字符串的小细节
- php中的图像下载函数,PHP实现的下载远程图片自定义函数分享
- String s = new String(123) 究竟创建了几个对象
- 瑶琳c语言,来桐庐瑶琳仙境,开启一场18°C的奇妙之旅
- 【技术文档】JEECG整合JXLS步骤与开发
- axure怎样24位bmp输出_【白皮书】使用24位设备进行基础应变测量
- linux 从一台服务器向另台服务器复制文件
- python基础之函数介绍进阶操作、全局变量局部变量
- 转载:兼容IE的内阴影和外阴影效果
- linux运行bak,linux 备份学习
- CMM与ISO9000
- 西门子S7-200SMART四种密码解密软件
- f-droid_使用F-Droid在Android上开源
- Xshell6 Xftp6 破解
- 10:1,AlphaStar横空出世,碾压星际争霸2人类职业玩家 TLO 和 MaNa
- 暑期JAVA学习(14.1)Map集合案例-统计投票人数
- Redis 3种集群方式,别傻傻分不清!
- 【备忘】Mongodb/Redis/HBase NoSql视频教程2017数据库自学教程
热门文章
- 学习笔记:Model Diagnostics-模型诊断(线性回归)
- makefille的使用
- 三代测序数据纠错的方法、装置和计算机可读存储介质与流程
- 3ds max 把模型放置到坐标系中心(原点)
- 十、调度算法----时间片轮转、优先级调度、多级反馈队列
- Sublime搭建Python环境
- 机器学习--多标签softmax + cross-entropy交叉熵损失函数详解及反向传播中的梯度求导
- C++ 随机数生成的2种方法--生成指定范围内的随机数
- python操作mongodb进行读写
- File `listings.sty' not found. usepackage