C++调用Python实例

来源:互联网 发布:人工智能机器2氏族战争 编辑:程序博客网 时间:2024/06/16 02:43
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的实现就完成了。
1 0
原创粉丝点击