Python嵌入C/C++进行开发详解


Posted in Python onJune 09, 2020

如果你想把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 <python.h> 
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)。

知识点扩展:

Python调用C/C++ DLL动态链接库的方法

首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件:

//hello.h
#ifdef EXPORT_HELLO_DLL
#define HELLO_API __declspec(dllexport)
#else
#define HELLO_API __declspec(dllimport)
#endif
extern "C"
{
 HELLO_API int IntAdd(int , int);
}

CPP文件:

//hello.cpp
#define EXPORT_HELLO_DLL
#include "hello.h"
HELLO_API int IntAdd(int a, int b)
{
 return a + b;
}

这里有两个注意点:

(1)弄清楚编译的时候函数的调用约定采用的__cdecl还是__stdcall,因为根据DLL中函数调用约定方式,Python将使用相应的函数加载DLL。

(2)如果采用C++的工程,那么导出的接口需要extern "C",这样python中才能识别导出的函数。

到此这篇关于Python嵌入C/C++进行开发详解的文章就介绍到这了,更多相关Python如何嵌入C/C++进行开发内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
pycharm 配置远程解释器的方法
Oct 28 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
Python OS模块实例详解
Apr 15 Python
我们为什么要减少Python中循环的使用
Jul 10 Python
Django中Middleware中的函数详解
Jul 18 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
Python实现aes加密解密多种方法解析
May 15 Python
Python基于execjs运行js过程解析
Nov 27 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 Python
python process模块的使用简介
May 14 Python
Keras load_model 导入错误的解决方式
Jun 09 #Python
如何用python处理excel表格
Jun 09 #Python
使用Keras 实现查看model weights .h5 文件的内容
Jun 09 #Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 #Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 #Python
Python带参数的装饰器运行原理解析
Jun 09 #Python
Python sorted对list和dict排序
Jun 09 #Python
You might like
杏林同学录(四)
2006/10/09 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
jquery.validate使用详解
2016/06/02 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
vue小白入门教程
2018/04/02 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
python中的set实现不重复的排序原理
2018/01/24 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
Python的Lambda函数用法详解
2019/09/03 Python
Python程序控制语句用法实例分析
2020/01/14 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
党委书记岗位职责
2013/11/24 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
2014企业年终工作总结
2014/12/23 职场文书
2015年体育部工作总结
2015/04/02 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python