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使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
python中redis的安装和使用
Dec 04 Python
Python中的TCP socket写法示例
May 11 Python
TensorFlow实现Logistic回归
Sep 07 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
PyCharm第一次安装及使用教程
Jan 08 Python
python Shapely使用指南详解
Feb 18 Python
python 装饰器的实际作用有哪些
Sep 07 Python
Python类成员继承重写的实现
Sep 16 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
PHP聊天室技术
2006/10/09 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP生成plist数据的方法
2015/06/16 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP微商城开源代码实例
2019/03/27 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
幼师自荐信范文
2013/10/06 职场文书
升学宴主持词
2014/04/02 职场文书
英语系毕业生求职信
2014/07/13 职场文书
租房协议书范例
2014/10/14 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python