将Python代码嵌入C++程序进行编写的实例,python嵌入

把python嵌入的C++里面需要做一些步骤

安装python程序,这样才能使用python的头文件和库

在我们写的源文件中增加“Python.h”头文件,并且链入“python**.lib”库(还没搞清楚这个库时静态库还是导出库,需要搞清楚)

掌握和了解一些python的C语言api,以便在我们的c++程序中使用

常用的一些C API函数

在了解下面的函数之前有必要了解一下**PyObject***指针,python里面几乎所有的对象都是使用这个指针来指示的。

Py_Initialize()&&Py_Finalize()

在调用任何python的c函数之前需要调用的函数,“Py_Initialize”是用来初始化python模块的,推测是加载初始化加载dll的。对应的在使用python模块之后用“Py_Finalize”来释放模块。

PyImport_ImportModule()

用来载入一个python模块,这个模块就是一般的python文件。这里需要注意的是,在加载这个模块的时候会执行模块里面所有可以执行的语句。包括import导入语句和在函数体之外的所有语句

PyObject_GetAttrString()

返回模块里面的函数

Py_BuildValue()

建立一个参数元组,一般都是用这个函数来建立元组,然后将这个元组作为参数传递给python里面的函数。

PyEval_CallObject()

调用函数,并把“Py_BuildValue”建立的元组作为参数传递给被调用的函数

源码实例

下面的实例是在c++代码中调用Python的函数,传递参数并且获取返回值

test.cpp代码

#include <iostream>

#include <Python.h>

using namespace std;

int main(int argc, char* argv[])

{

Py_Initialize();  //初始化

PyObject* pModule = NULL;

PyObject* pFunc = NULL;

PyObject* pParam = NULL;

PyObject* pResult = NULL;

const char* pBuffer = NULL;

int iBufferSize = 0;

pModule = PyImport_ImportModule(“test_python");

if (!pModule)

{

cout << "get module failed!" << endl;

exit (0);

}

pFunc = PyObject_GetAttrString(pModule, "main");

if (!pFunc)

{

cout << "get func failed!" << endl;

cout << int(pFunc) << endl;

exit (0);

}

pParam = Py_BuildValue("(s)", "HEHEHE");

pResult = PyEval_CallObject(pFunc,pParam);

if(pResult)

{

if(PyArg_Parse(pResult, "(si)", &pBuffer, iBufferSize))

{

cout << pBuffer << endl;

cout << iBufferSize << endl;

}

}

Py_DECREF(pParam);

Py_DECREF(pFunc);

Py_Finalize();

//cout << "hello" << endl;

return 0;

}

test_python.py代码

def main(szString):

return ("hello", 5)

 

将Python代码嵌入C++程序进行编写的更多相关文章

  1. 编程语言分类,Python代码执行,应用程序使用文件的三步骤,变量,常量,垃圾回收机制

    编程语言分为 机器语言(直接用二进制01跟计算机直接沟通交流,直接操作硬件) 优点:计算机能够直接读懂,速度快 缺点:开发效率极低 汇编语言(用简单的英文标签来表示二进制数,直接操作硬件) 优点:开发 ...

  2. 学习 27 门编程语言的长处,提升你的 Python 代码水平

    Python猫注:Python 语言诞生 30 年了,如今的发展势头可谓如火如荼,这很大程度上得益于其易学易用的优秀设计,而不可否认的是,Python 从其它语言中偷师了不少.本文作者是一名资深的核心 ...

  3. [python]通过微信公众号“Python程序员”,编写python代码

    今天发现微信公众号中,居然可以编写python代码,很是惊喜,觉得蛮有趣的. 步骤如下: 1.关注微信公众号“Python程序员” 2.关注成功后,点击右下角的“潘多拉”->"Pyth ...

  4. 利用Python代码编写计算器小程序

    import tkinter import tkinter.messagebox import math class JSQ: def __init__(self): #创建主界面 self.root ...

  5. 推荐一款新框架PyScript:在 HTML 嵌入 Python 代码!

    一.介绍 网页浏览器是目前世界上最普遍,最可携的计算机环境.几乎所有人都可以在计算机或是手机上使用网页浏览器,以没有基础设施障碍的方式访问程序. 在 PyCon US 2022 上,知名 Python ...

  6. 编写高质量的Python代码系列(一)之用Pythonic方式来思考

    Python开发者用Pythonic这个形容词来描述具有特定风格的代码.这种风格是大家在使用Python语言进行编程并相互协作的过程中逐渐形成的习惯.那么,如何以改风格完成常见的Python编程工作呢 ...

  7. Python基础:五、Python程序的编写方式

    python程序有两种编写方式: 1. 进入cmd控制台(linux终端),输入python进入编辑模式,这时候我们可以直接编写python程序 2. 也可以在.py文件中编写python代码,通过p ...

  8. day02编程语言,Python语言介绍,Python解释器安装,环境变量,Python代码执行,pip,应用程序使用文件的三步骤,变量,变量的三大组成,比较,pycharm

    复习 重点: 1.进制转换:二进制 与十六进制 2.内存分布:栈区 与堆区 # 二进制1111转换十六进制 => 8 4 2 1 => f 10101100111011 => 2a7 ...

  9. Python程序的编写方式

    直接在Python的交互式环境编写代码 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你 ...

随机推荐

  1. InitCommonControlsEx()

    参见:http://blog.sina.com.cn/s/blog_4fcd1ea30100qlzp.html MFC通用控件初始化 ********************************* ...

  2. listView 单选实现

    上一篇知道可以使用android自带的listview的chiocemode的单选模式实现.但那个布局是系统自带的checkedTextView,有时候我们需要自己实现布局,那么下面我们开始实现   ...

  3. Apache-Tomcat 和 Apache-Maven配置

    1.1.下载安装文件 官网对应版本下载,例:apache-tomcat-8.0.35-windows-x64.zip 1.2.指定对应的安装目录: 例:D:\JavaSoft\apache-tomca ...

  4. python----slots属性安全类

    问题:__slots__可以用于构造安全的类.如果一个类使用了__slots__那么它的属性就不在自由了. 下面举例说明: 1.自由属性. class person(object): def __in ...

  5. VitualBox中linux系统ping ip能通域名不通的解决办法

    linux本机的DNS配置信息是在:/etc/resolv.conf vi打开,修改为本机的dns服务器地址

  6. Paas

    bae sae PowerApp 还有啥???

  7. 联想企业网盘:SaaS服务集群化持续交付实践

    1      前言 当代信息技术飞速发展,软件和系统的代码规模都变得越来越大,而且组件众多,依赖繁复,每次新版本的发布都仿佛是乘坐一次无座的绿皮车长途夜行,疲惫不堪.软件交付是一个复杂的工程,涉及到软 ...

  8. 鼠标拖放div 实现

    Javascript的mousemove事件类型是一个实时响应的事件,当鼠标指针的位置发生变化时(至少移动1个像素),就会触发mousemove事件.该事件响应的灵敏度主要参考鼠标指针移动速度的快慢, ...

  9. php快递查询

    http://www.oschina.net/code/snippet_60100_25087 <?php class Express { private $expressname =array ...

  10. 《Qt编程的艺术》——8.2 显示目录层次

    现在我们准备通过创建一个小程序来获得关于InterView的实践经验,使用QDirModel和拿来就用的view,来在四个不同的view中显示主目录,如图8.5所示.在代码里,除了例行公事先实例化一个 ...