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实现给qq邮箱发送邮件的方法
May 28 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
浅谈Python peewee 使用经验
Oct 20 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
pandas 将list切分后存入DataFrame中的实例
Jul 03 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
python如何代码集体右移
Jul 20 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 Python
Pytorch中的数据集划分&正则化方法
May 27 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
php URL编码解码函数代码
2009/03/10 PHP
php 数组使用详解 推荐
2011/06/02 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
浅谈vue父子组件怎么传值
2018/07/21 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python最小二乘法矩阵
2019/01/02 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
毕业生自荐信的主要内容
2013/10/29 职场文书
行政经理岗位职责
2013/11/09 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
企业宣传策划方案
2014/05/29 职场文书
最新离婚协议书范本
2014/08/19 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
校长个人总结
2015/03/03 职场文书
小学生暑假安全公约
2015/07/14 职场文书
放假通知怎么写
2015/08/18 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书