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中处理字符串之islower()方法的使用简介
May 19 Python
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
python实现五子棋小程序
Jun 18 Python
Django CSRF跨站请求伪造防护过程解析
Jul 31 Python
python批量处理文件或文件夹
Jul 28 Python
详解Python绘图Turtle库
Oct 12 Python
Python实现名片管理系统
Feb 14 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
Python机器学习之底层实现KNN
Jun 20 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
php 保留小数点
2009/04/21 PHP
php 空格,换行,跳格使用说明
2009/12/18 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
python批量生成本地ip地址的方法
2015/03/23 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
详解Python pygame安装过程笔记
2017/06/05 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
爱岗敬业演讲稿范文
2014/01/14 职场文书
2015年转正工作总结范文
2015/04/02 职场文书