[TOC]
环境
VS2013
Python27_x86
步骤
1、引入头文件和库
将Python安装目录下的include
和libs
文件夹引入到项目中
将libs
目录下的python27.lib
复制一份为python27_d.lib
2、测试脚本
Python
脚本如下
def Hello(): print("Hello") def Add(a,b): return a+b
3、调用Python脚本
#include "include/Python.h" //..............Py_Initialize(); //初始化,创建一个Python虚拟环境if (Py_IsInitialized()) { PyObject* pModule = NULL; PyObject* pFunc = NULL; pModule = PyImport_ImportModule("test_python"); //参数为Python脚本的文件名 if (pModule) { pFunc = PyObject_GetAttrString(pModule, "Hello"); //获取函数 PyEval_CallObject(pFunc, NULL); //执行函数 } else { printf("导入Python模块失败...\n"); } }else{ printf("Python环境初始化失败...\n"); } Py_Finalize()
4、传递参数及返回结果
int Test_Add(int a, int b){ Py_Initialize(); PyObject* pModule = NULL; PyObject* pFunc = NULL; pModule = PyImport_ImportModule("test_python"); pFunc = PyObject_GetAttrString(pModule, "Add"); PyObject* pArgs = PyTuple_New(2); //以Tuple的形式传递参数,参数名为需要传递的参数的个数 PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", a)); //i 表示 int类型, 0 表示第一个参数 PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", b)); //以上几句 也可写为: //PyObject* pArgs = Py_BuildValue("ii", a, b); PyObject* pReturn = NULL; pReturn = PyEval_CallObject(pFunc, pArgs); int nResult; PyArg_Parse(pReturn, "i", &nResult); //返回值,转为int return nResult; }
5、打包运行
客户电脑上可不再安装Python
环境,需要将Python
安装目录下的Lib
和Dlls
放到程序运行目录下,并添加Python27.dll
到运行目录即可。Python27.dll
可通过编译Python源码或系统目录或通过py2exe
生成的运行程序目录下获得。
运行目录
6、Python与C++类型转换
Format Code | Python Type | C/C++ Type |
---|---|---|
s | str | char* |
z | str/None | char*/NULL |
i | int | int |
l | long | long |
c | str | char |
d | float | double |
D | complex | Py_Complex* |
O | (any) | Py_Object* |
S | str |
作者:云谁之殇
链接:https://www.jianshu.com/p/c9ebc92c8b30
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦