[TOC]
环境VS2013
Python27_x86
将Python安装目录下的include和libs文件夹引入到项目中
将libs目录下的python27.lib复制一份为python27_d.lib
Python脚本如下
def Hello():
print("Hello")
def Add(a,b):
return a+b3、调用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



