资源描述:
《python与C++混合编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、普通方式一、环境搭建1.安装python2.6(python3.xx版本编译失败,未找到原因)。2.配置vs2008项目(python自带的python26.dll为release版本,所以vs2008项目也必须调整为release,但是通过设置也可以对release进行调试,如果需要debug版本可以从网上下载已有的python26_d.dll和python26_d.lib,也可以下载python源码自己编译。)① C/C++---->常规--->附件库包含目录,加入python头文件目录,如下图:② 连接器--->常规--->附件库目录。加入python库文件目录,如下图:③
2、连接器--->输入--->附加依赖项。加入python库文件名,如下图:二、代码实现1.C++调用python① 高层次嵌入python(所谓的高层次嵌入主要是指程序与脚本间没有交互)#includeintmain(){Py_Initialize();/*Python解释器初始化*/PyRun_SimpleString("print'hi,python!'");/*运行python字符串*/Py_Finalize();/*结束Python解释器,释放资源*/return0;}① 低层次嵌入pyton,可以交互。但是只限python的基本类型数据(整型、浮点型、字
3、符串、元组、列表和字典)。C++代码:#include#includeintmain(intargc,char*argv[]){PyObject*modulename,*module,*dic,*func,*args,*rel,*list;char*funcname1="sum";inti;Py_ssize_ts;printf("-==在C中嵌入Python==-");/*Python解释器的初始化*/Py_Initialize();if(!Py_IsInitialized()){printf("初始化失败!");return-1;}/*导
4、入Python模块,并检验是否正确导入*/modulename=Py_BuildValue("s","pytest");/*pytest参数,为python脚本,此处的意思是导入当前路径下名称为pytest.py的python脚本文件*/module=PyImport_Import(modulename);if(!module){printf("导入pytest失败!");return-1;}/*获得模块中函数并检验其有效性*/dic=PyModule_GetDict(module);if(!dic){printf("错误!");return-1;}/*获得sum函数地址并验证
5、*/func=PyDict_GetItemString(dic,funcname1);if(!PyCallable_Check(func)){printf("不能找到函数%s",funcname1);return-1;}/*构建列表*/list=PyList_New(5);printf("使用Python中的sum函数求解下列数之和");for(i=0;i<5;i++){printf("%dt",i);PyList_SetItem(list,i,Py_BuildValue("i",i));}printf("");/*构建sum函数的参数元组*/args=PyTuple_N
6、ew(1);PyTuple_SetItem(args,0,list);/*调用sum函数*/PyObject_CallObject(func,args);/*释放资源*/Py_DECREF(list);Py_DECREF(args);Py_DECREF(module);/*结束Python解释器*/Py_Finalize();printf("按回车键退出程序:");getchar();return0;}Python代码,pytest.py文件内容。importmath#导入python自带math库,可用于简单的数学计算defsum(p1):#定义sum函数count=len(
7、p1)sum=0foriinrange(count):#求数组中所有元素的和sum+=p1[i]print(sum)1.Python调用C++(使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件))fromctypesimport*dll=CDLL("add.dll")printdll.Add(1,102)结果:103利用boost库中的,boost.python方式一、环境搭建1.下载boost库,自己编译,或