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调用相关推荐

  1. 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 ...

  2. python如何定义带有可选参数的函数_python中如何正确调用带可选参数的函数

    我是python的初学者,遇到了一个需要可选参数的函数的问题. 此函数获取可变数量的文件路径作为参数,可以是2到n个参数. 之后,一定数量的可选参数可以传递给这个函数. 我试过做这样的事:def co ...

  3. java 调用cpp_java jni 调用cpp文件中的方法 | 学步园

    这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...

  4. python 装饰器实践,实现定时函数和失败异常重复调用

    python 装饰器实践,实现定时函数和失败异常重复调用 执行请求或函数,出现异常情况下指定重复执行次数 可以作为一个包调用 方法 get()和post 做请求,execcunt = 指定请求失败再次 ...

  5. 如何调用其他文件的static函数

    方法: include 目标static函数的.c文件 通过函数包住static函数,另一文件调这个函数 通过static的地址调用 优点 可能是为了兼容性这么玩, 缺点 如果一个大工程这样写,文件会 ...

  6. jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题

    在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb.而.ipynb文件并不能简单的import进.py或者.ipynb文件中 ...

  7. python嵌入到程序_在应用中嵌入Python:转

    前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更合适的功能.这可以有很多 ...

  8. 在应用中嵌入Python

    翻译: gashero 前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python更 ...

  9. 在应用中嵌入Python - lf8289的专栏 - CSDNBlog

    在应用中嵌入Python - lf8289的专栏 - CSDNBlog " 在应用中嵌入Python收藏 新一篇: 软件在线升级设计方案及演变过程分析 | 旧一篇: 在windows下面关闭 ...

最新文章

  1. Django视图之HttpRequest对象和HttpResponse对象
  2. CF650C Table Compression
  3. 字符数组和字符串的小细节
  4. php中的图像下载函数,PHP实现的下载远程图片自定义函数分享
  5. String s = new String(123) 究竟创建了几个对象
  6. 瑶琳c语言,来桐庐瑶琳仙境,开启一场18°C的奇妙之旅
  7. 【技术文档】JEECG整合JXLS步骤与开发
  8. axure怎样24位bmp输出_【白皮书】使用24位设备进行基础应变测量
  9. linux 从一台服务器向另台服务器复制文件
  10. python基础之函数介绍进阶操作、全局变量局部变量
  11. 转载:兼容IE的内阴影和外阴影效果
  12. linux运行bak,linux 备份学习
  13. CMM与ISO9000
  14. 西门子S7-200SMART四种密码解密软件
  15. f-droid_使用F-Droid在Android上开源
  16. Xshell6 Xftp6 破解
  17. 10:1,AlphaStar横空出世,碾压星际争霸2人类职业玩家 TLO 和 MaNa
  18. 暑期JAVA学习(14.1)Map集合案例-统计投票人数
  19. Redis 3种集群方式,别傻傻分不清!
  20. 【备忘】Mongodb/Redis/HBase NoSql视频教程2017数据库自学教程

热门文章

  1. 学习笔记:Model Diagnostics-模型诊断(线性回归)
  2. makefille的使用
  3. 三代测序数据纠错的方法、装置和计算机可读存储介质与流程
  4. 3ds max 把模型放置到坐标系中心(原点)
  5. 十、调度算法----时间片轮转、优先级调度、多级反馈队列
  6. Sublime搭建Python环境
  7. 机器学习--多标签softmax + cross-entropy交叉熵损失函数详解及反向传播中的梯度求导
  8. C++ 随机数生成的2种方法--生成指定范围内的随机数
  9. python操作mongodb进行读写
  10. File `listings.sty' not found. usepackage