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

 更新时间:2020年06月09日 14:47:12   作者:silencement  
在本篇文章里小编给大家分享了关于Python嵌入C/C++进行开发的相关知识点内容,有兴趣的朋友们可以参考下。

如果你想把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使用Pillow将照片转换为1寸报名照片的教程分享

    python使用Pillow将照片转换为1寸报名照片的教程分享

    在现代科技时代,我们经常需要调整和处理照片以适应特定的需求和用途,本文将介绍如何使用wxPython和Pillow库,通过一个简单的图形界面程序,将选择的照片转换为指定尺寸的JPG格式,并保存在桌面上,需要的朋友可以参考下
    2023-09-09
  • tornado+celery的简单使用详解

    tornado+celery的简单使用详解

    今天小编就为大家分享一篇tornado+celery的简单使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • pandas 空数据处理方法详解

    pandas 空数据处理方法详解

    这篇文章主要介绍了pandas 空数据处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Django使用redis缓存服务器的实现代码示例

    Django使用redis缓存服务器的实现代码示例

    这篇文章主要介绍了Django使用redis缓存服务器的实现代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • python发送json参数的实例代码

    python发送json参数的实例代码

    在写脚本的过程中,除了发送form表单参数之外,我们还会发送json格式的参数。那么碰见json格式要怎么发送呢,这篇我们来解决这个问题,需要的朋友可以参考下
    2019-10-10
  • 使用PyTorch训练一个图像分类器实例

    使用PyTorch训练一个图像分类器实例

    今天小编就为大家分享一篇使用PyTorch训练一个图像分类器实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python获取指定字符前面的所有字符方法

    Python获取指定字符前面的所有字符方法

    下面小编就为大家分享一篇Python获取指定字符前面的所有字符方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python内置函数locals和globals对比

    Python内置函数locals和globals对比

    这篇文章主要介绍了Python内置函数locals和globals对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Pycharm 2020年最新激活码(亲测有效)

    Pycharm 2020年最新激活码(亲测有效)

    本文给大家分享Pycharm 2020年最新激活码,亲测试过可以放心使用,感兴趣的朋友快来吧
    2020-01-01
  • pandas 自定义列名的实现

    pandas 自定义列名的实现

    在pandas中,你可以通过多种方法自定义DataFrame的列名,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12

最新评论