问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使Python嵌入C++应用程序

发布网友 发布时间:2022-04-18 09:04

我来回答

2个回答

懂视网 时间:2022-04-18 13:25

如果你想把Python嵌入C/C++中是比较简单的事情,你需要的是在VC中添加Python的include文件目录和lib文件目录。下面我们来看下如何把Python嵌入C/C++中。

VC6.0下,打开 tools->options->directories->show directories for,将Python安装目录下的inlude目录添加到inlude files项中,将libs目录添加到library files项中。

VC2005下,打开tools->options->项目和解决方案->VC++目录,然后做相同工作。

代码如下:

在debug下执行出错,“无法找到python31_d.lib文件”,后查到原因是:在debug下生成必须要有python31_d.lib文件,否则只能在release下生成

#include  
int main() 
{ 
Py_Initialize(); 
PyRun_SimpleString("Print 'hi, python!'"); 
Py_Finalize(); 
return 0; 
}

Py_Initialize函数原型是:void Py_Initialize()

把Python嵌入C/C++中时必须使用该函数,它初始化Python解释器,在使用其他的Python/C API之前必须先调用该函数。可以使用Py_IsInitialized函数判断是否初始化成功,成功返回True。

PyRun_SimpleString函数原型是int PyRun_SimpleString(const char *command),用来执行一段Python代码。

注意:是否需要维持语句间的缩进呢?

Py_Finalize函数原型是void Py_Finalize(),用于关闭Python解释器,释放解释器所占用的资源。

PyRun_SimpleFile函数可以用来运行".py"脚本文件,函数原型如下:

int PyRun_SimpleFile(FILE *fp, const char *filename);

其 中fp是打开的文件指针,filename是要运行的python脚本文件名。但是由于该函数官方发布的是由visual studio 2003.NET编译的,如果使用其他版本的编译器,FILE定义可能由于版本原因导致崩溃。同时,为简便起见可以使用如下方式来代替该函数:

PyRun_SimpleString("execfile(‘file.py’)"); //使用execfile来运行python文件

Py_BuildValue()用于对数字和字符串进行转换处理,变成Python中相应的数据类型(在C语言中,所有Python类型都被声明为PyObject类型),函数原型如下:

PyObject *Py_BuildValue(const char *format, …..);

PyString_String()用于将PyObject*类型的变量转换成C语言可以处理的char*型,具体原型如下:

char* PyString_String(PyObject *p);

热心网友 时间:2022-04-18 10:33

Python容易扩展和嵌入。Python提供的许多标准模块支持C或者C++接口。Python和C可以一起工作,它可以嵌入到C或者C++的应用程序当中,因此可用Python语言为应用程序提供脚本接口,由于支持跨语言开发。
可用Python设计概念化应用程序,并逐步移植到C,使用前不必用C重写应用程序。(Jython使Python可以和Java一起工作,使开发者可以在Python里面调Java的包,也可以在Java里面使用Python的对象。还有更妙的,由于Jython的解释器完全用Java编写,因此可以在支持Java的任何平台上部署Python程序,甚至WEB浏览器也可以直接运行Python脚本。)
提出问题在某个C++应用程序中,我们用一组插件来实现一些具有统一接口的功能,我们使用Python来代替动态链接库形式的插件,这样可以方便地根据需求的变化改写脚本代码,而不是必须重新编译链接二进制的动态链接库。Python强大的功能足以胜任,但是有一些操作系统特定的功能需要用C++来实现,再由Python调用。所以,最基础地,我们需要做到:
1. 把Python嵌入到C++应用程序中,在C++程序中调用Python函数和获得变量的值;
2. 用C++为Python编写扩展模块(动态链接库),在Python程序中调用C++开发的扩展功能函数。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
乾隆小时候的书童是谁 下面对句式判断有误的一项是( ) A.当立者乃公子扶苏(判断句) ...为折线,把 折起,使平面 平面 ,连接 (1)求证: ;(2)求二面角 图中由线段OA、AB组成的折线表示的是小明步行所走的路程和时间之间的关... 动态图像粒度粒形分析仪 oppor9splus视频通话怎么开美颜 微信视频聊天怎么开美颜oppor9 谁家出售二手胶囊填充机NJP1200 NJP-1200A硬胶囊填充机仪器特点简介 NJP-1200A硬胶囊填充机仪器参数 男朋友不喜欢我穿裙子应该怎么办? 对于老公不在乎你穿着问题,你会觉得就是不爱你吗? 老公和孩子不喜欢我买快递的绿色衣服怎么办 老公嫌弃自己穿衣风格不好看该怎么办? 男朋友特别不喜欢我穿裙子,而且特别讨厌我穿短裙,他这是为什么啊?我很喜欢穿裙子,他这样,我怎么办? 我穿的衣服大家都说好看,老公却不乐意。他什么意思? 男朋友不喜欢我的穿衣风格,我该为此改变吗? TGP碾压局是什么意思 LOL什么是碾压局 山东联通汽车违章记录短信通知业务 怎样办理手机交通违章信息提醒业务 如何查询东莞交强险到期时间 H2S657,我查这个车牌号车主叫什么名字 表格竖行输入车牌号怎么求车数的和 交强险车牌号不一致能检车么 本人名下两辆车在一个省 不在一个市 能互相换车牌号吗? 函数请教下大大们,EXCEL中两列,车牌号中包含粤,则第二列自动出现“广东”,包含桂出现“广西”等 关于EXCEL中两列排序问题 excel里怎么把姓名和电话号区分为 对应的两个单元,就是图片上这样的,怎么把它改为对应没有空格的表格 冬至后咸鱼放长时间有质油味怎处理 微信好友被删了,自己又不知道他的了。怎么找回? 老公不喜欢我打扮,为什么会这样呢? 为什么老公不喜欢老婆的穿着打扮老婆也是个有气质的人 我老公不喜欢我穿性感的衣服,这是为什么呀。 老公嫌我穿的不好看 我老公不喜欢我穿好看的衣服.也讨厌我上网..我怎样才好? 我老公不喜欢我打扮的很时尚,他总是叫我穿的普通一点,这是为什么呀? 老公不喜欢我穿比较性感的衣服,这是为什么??? 我穿了一件衣服老公嫌我不够漂亮,难看,这是为什么,老说我穿衣服不好看... 为什么我老公不喜欢我穿低领的衣服,因为一穿胸就会漏出来点,要是他看到了,他就会用手去提我的衣服 老公不喜欢我穿性感的衣服就连衣领稍微低点的都不肯 python怎么和C或者C++混合编程 7个月孕妇梦见红花蛇是什么预兆 怎么删除电脑任务栏右边某些不想要的图标 电脑桌面右下角任务栏里出现了【我的电脑】菜单,如何删除? 电脑下面任务栏右下角里有不用的图标怎么去掉 怎么样才能在c程序中嵌入python而不用依赖系统安装的python而运行。也说是说怎么把pyth 有什么办法没加好友 也可以查看别人的空间 死河蟹为什么不能吃 Oracle在中国哪些城市设有OCP原厂培训和认证考试的地方?南昌有没有?还有WDP和OCP有什么区别? 10天均线大于20日均线 且小于10天的选股公式