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 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
python远程连接MySQL数据库
Apr 19 Python
Python常用库大全及简要说明
Jan 17 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
Python中SQLite如何使用
May 27 Python
TensorFlow-gpu和opencv安装详细教程
Jun 30 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 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 文件扩展名 获取函数
2009/06/03 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
JS 常用校验函数
2009/03/26 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
9种python web 程序的部署方式小结
2014/06/30 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
python实现自动清理重复文件
2020/08/24 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
学生生病请假条范文
2014/02/16 职场文书
爱我中华教学反思
2014/04/28 职场文书
会计岗位说明书
2014/07/29 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
影视后期实训报告
2014/11/05 职场文书
新郎答谢词
2015/01/04 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
大学生团日活动总结
2015/05/06 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
党纪处分决定书
2015/06/24 职场文书
Python实现科学占卜 让视频自动打码
2022/04/09 Python