[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 | PyStringObject |
网友评论