您的位置:首页 > 编程语言 > C语言/C++

C++调用Python实例

2017-02-15 13:54 603 查看
C++调用Python方法基本有以下几个步骤:
1、下载Python;
2、配置信息(本次我用的配置是VS2013+Python36),注意Python请下载32位的版本(即使你的操作系统是64位的),否则会函数未定义的错误
3、把Python加到VS2013的方法;先建立一个空的Win32控制台项目,创建main.cpp(具体代码下面由贴出),把python3.6的减压后,将里面的inlcude和libs两个文件夹拷贝到。sln的同一级目录下,然后打开libs,复制一份python36.lib,并命名为python36_d.lib(这个的原因是inlcude目录下的pyconfig.h里面的代码在debug下调用的是python36_d.lib), 然后右击进入属性设置页 C++->常规->附加包含目录,输入 ..\include;
再找到链接器->常规->附加目录项,输入 ..\libs; 接着找到链接器->输入->附加依赖项,添加python36_d.lib;到这里,配置信息就OK了;
4、接下来把python3.6的减压文件下的python36.dll拷贝到Debug目录下(与Test.exe同目录),并在该Debug目录下新建一个txt文件,改名为Test001.py(里面的内容下面将会贴出)
5、接下来就是代码部分:
main.cpp:

#include <iostream>

using namespace std;

extern "C"

{

#include "Python.h"

}

//调用输出"Hello Python"函数

void Hello()

{

 Py_Initialize();//调用Py_Initialize()进行初始化

 PyObject * pModule = NULL;

 PyObject * pFunc = NULL;

 pModule = PyImport_ImportModule("Test001");//调用的Python文件名

 pFunc = PyObject_GetAttrString(pModule, "Hello");//调用的函数名

 PyEval_CallObject(pFunc, NULL);//调用函数,NULL表示参数为空

 Py_Finalize();//调用Py_Finalize,和Py_Initialize相对应的.

}

//调用Add函数,传两个int型参数

void Add()

{

 Py_Initialize();

 PyObject * pModule = NULL;

 PyObject * pFunc = NULL;

 pModule = PyImport_ImportModule("Test001");//Test001:Python文件名

 pFunc = PyObject_GetAttrString(pModule, "Add");//Add:Python文件中的函数名

 //创建参数:

 PyObject *pArgs = PyTuple_New(2);//函数调用的参数传递均是以元组的形式打包的,2表示参数个数

 PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 6));//0--序号,i表示创建int型变量

 PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 8));//1--序号

 //返回值

 PyObject *pReturn = NULL;

 pReturn = PyEval_CallObject(pFunc, pArgs);//调用函数

 //将返回值转换为int类型

 int result;

 PyArg_Parse(pReturn, "i", &result);//i表示转换成int型变量

 cout << "6 + 8 = " << result << endl;

 Py_Finalize();

}

int main(int argc, char** argv)

{

 cout << "调用Test001.py中的Hello函数..." << endl;

 Hello();

 cout << "\n调用Test001.py中的Add函数..." << endl;

 Add();

 getchar();

 return 0;

}

6、Test001.py文件中内容

def Hello():

    print("Hello Python")

def Add(a, b):

    return a+b

7、这样简单的C++调用Python的实现就完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: