python嵌入c代码_怎样把Python代码嵌入到C程序

匿名用户

1级

2017-11-03 回答

这篇文章主要介绍了将Python代码嵌入C++程序进行编写的实例,尽管通常还是Python代码中调用C++程序的情况较多...需要的朋友可以参考下

把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代码

[cpp] view plain copy

#include 

#include 

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 <

exit (0);

}

pFunc = PyObject_GetAttrString(pModule, "main");

if (!pFunc)

{

cout <

cout <

exit (0);

}

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

pResult = PyEval_CallObject(pFunc,pParam);

if(pResult)

{

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

{

cout <

cout <

}

}

Py_DECREF(pParam);

Py_DECREF(pFunc);

Py_Finalize();

//cout <

return 0;

}

test_python.py代码

[py] view plain copy

def main(szString):

return ("hello", 5)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FileUpload之单个文件上传

拖一个FileUpload控件,设计如图: 查看源&#xff1a; <body> <form id"form1" runat"server"> <div> <asp:FileUpload ID"UploadFile" runat"server" /> <br /> <asp:Bu…

excel可以处理html吗,处理包含XML/HTML元素的Excel文件

在Excel文件中包含大量HTML元素时&#xff0c;会带来以下问题&#xff1a;1.字数分析不准确&#xff1b;2.HTML元素和内容混杂在一起&#xff0c;翻译员需要处理这些元素&#xff0c;在处理过程中&#xff0c;可能会更改、丢失HTML元素&#xff0c;这可能会给客户造成影响&…

spring 动态代理_分析动态代理给 Spring 事务埋下的坑

前言Spring的声明式事务让我们不在编写获得连接、关闭连接、开启事务、提交事务、回滚事务等代码&#xff0c;通过一个简单的Transactional注解&#xff0c;就让我们轻松进行事务处理。我们知道Spring事务基于AOP&#xff0c;采用动态代理实现&#xff0c;虽然使用简单&#xf…

计算机的网络功能不包括下面项,计算机网络中,防火墙的功能不包括

摘要&#xff1a;害的通意在城展预中健康教育外伤防交市开&#xff0c;计算机网行A人员、管政策驾驶影响因素安全不系理与带的分析是进。人E人核好年儿年D骨结童B、防火婴幼儿青少青壮、老、成发于。菌血以下清学对真的认试验识&#xff0c;不包新型检测菌、结合菌B、检隐球不能…

sql server 千万级大数据sql更新_医疗SQL每日实例6数据更新大法

Update Day数据更新大法生/命/不/止/SQL/不/休01更新数据的铁规所有数据在被更新之前&#xff0c;必须先查询出数据结果&#xff0c;确认无误&#xff0c;再复制整行到下两行。将select * 更改为upate ,然后选择整个UPDATE 语句后&#xff0c;再执行命令。否则一旦出问题&#…

dnse 2.0音效厉害还是full sound厉害点呢?谢谢!!

关于n81手机照片 想买个3g手机&#xff0c;高手来推荐下 ipod touch3 台电m50如何拆机 s3650w和s3650c有什么不一样 麻烦解答 郑州哪里的5530最便宜…行货… 诺基亚x3怎么看是正版还是水版&#xff1f; 5320怎样禁用内置播放器转载于:https://www.cnblogs.com/kangderui/archiv…

react中引入html文件,在react中怎么引用js

在react中怎么引用js推荐两种引入的方法&#xff0c;当然也可以自己编写一个JS类(ES6语法)实现动态插入JS到页面&#xff0c;然后在React项目引入。第一种&#xff1a;使用插件 react-load-script如果没有安装可以使用 yarn add react-load-script 或者 npm install react-load…

python 课程设计 夏敏捷_Python课程设计(微课视频版21世纪高等学校通识教育规划教材)/计算机技术入门丛书...

目录第1章 序列应用——猜单词游戏1.1 猜单词游戏功能介绍1.2 程序设计的思路1.3 关键技术1.3.1 序列数据结构I1.3.2 random模块1.4 程序设计的步骤第2章 函数应用——万年历2.1 万年历功能介绍2.2 程序设计的思路2.3 程序设计的步骤第3章 Tkinter图形界面应用——图形界面万年…

css中em与px的介绍及换算方法

em是什么&#xff1f; em指字体高&#xff0c;任意浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em16px。那么12px0.75em, 10px0.625em。为了简化font -size的换算&#xff0c;需要在css中的body选择器中声明Font-size62.5%&#xff0c;这就使em值变为16px*62.5…

用计算机奏音乐,计算机音乐

《计算机音乐》这是一款非常好用的使用计算机发声进行演奏音乐的软件&#xff0c;当计算机成为了乐器&#xff0c;你手里的钢琴它还会香吗&#xff1f;随时随地掏出你那不可思议的计算机&#xff0c;进行非凡的音乐演奏吧~这里拥有丰富的曲目&#xff0c;任你选择&#xff01;计…

计算机无法访问桌面,桌面无法显示_电脑桌面显示:无法访问,你可能没有权限使用网络......

电脑桌面图标不能显示是什么原因&#xff1f;电脑桌面图片不显示有以下几种原因:一、在桌面点击右键&#xff0c;然后选择查看&#xff0c;显示桌面图标按钮。勾选按钮后桌面突变便可以显示出来。如果是开机不能操作是死机了&#xff0c;重启一下电脑试试&#xff0c;还是不行开…

Linq Group By 注意点

比如有如下的Linq查询&#xff1a; var q from s in agedDebtCollectiongroup s by s.SalesPersonCode into pselect new{Key p.Key,//here can not using p.Select(s>s).Single().SalesPerson// or p.Single().SalesPersonSalesPersonName p.Max(s>s.SalesPerson),Cu…

python 爬虫 音乐下载 歌手_python爬虫批量下载全民K歌音乐

标签&#xff1a;爬虫网址示例: https://node.kg.qq.com/personal?uid639e9983222a338a直接上源码:import requestsimport timeimport reimport jsonimport pprintimport mathimport osheader{User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, lik…

计算机在智能交通应用,计算机技术在智能交通系统的应用

摘要&#xff1a;借助智能交通系统&#xff0c;优化公共交通运行效率&#xff0c;为人们提供更大的便利。文章对智能交通系统内涵进行了简要分析&#xff0c;并从数据处理系统、交通监控系统、车辆导航系统以及车辆辅助驾驶系统4个方面对计算机技术在智能交通系统中的应用展开了…

快乐是什么

有时候快乐就是一只烤鸡腿&#xff0c;耶&#xff0c;就这么简单转载于:https://www.cnblogs.com/haozime/archive/2010/01/11/2639247.html

信息系统项目管理师论文_「高项论文」谨防信息系统项目管理师论文12个写作丢分点...

2020年上半年信息系统项目管理师论文怎么写才能得高分&#xff1f;有些时候洋洋洒洒写下一大篇&#xff0c;自我感觉良好&#xff0c;结果分数不如意。这可能是你触到了丢分点而不自知。慧翔天地给你提供信息系统项目管理师12个论文写作丢分点以及对应解决方法&#xff0c;供你…

html%3ca%3e标签,How do I encode “” in a URL in an HTML attribute value?

click meIs correct, although ‘&’ is more commonly used than ‘&’ or ‘,’.If the ‘stringByAddingPercentEscapesUsingEncoding’ method does what it says on the tin, it should work(*), but the NSString documentation looks a bit unclear on which ch…

java wed登录面 代码_JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)...

下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码&#xff0c;一起看看吧。一、ServletJSPJavaBean开发模式(MVC)介绍ServletJSPJavaBean模式(MVC)适合开发复杂的web应用&#xff0c;在这种模式下&#xff0c;servlet负责处理用户请求&#xff0c;jsp…

.net类库学习(一)System.object

System.Object 是基类&#xff0c;.NetFramework 中的所有其他类都从这个类派生而来。派生的.net类可以使用这个类的属性&#xff0c;而且那些类可以使用Object类的成员。 方法&#xff1a; Object.Equals 1 publicstaticboolEquals(object,object);//静态成员2 publicvirtualb…

武汉科技大学计算机生命与科学周海,湖北双胞胎周海周洋:为了母亲,一个放弃清华,一人放弃中科院...

“你要相信命运给你一个比常人较低的出发点&#xff0c;是希望你用一生去奋斗出一个柳暗花明的故事”。人的命运就是这样&#xff0c;从来没有真正“完美”的样子&#xff0c;奋斗和努力是改变命运的最重要力量。高考对于贫困山区或农村的孩子来说&#xff1a;这就是命运转折点…