编程语言
首页 > 编程语言> > C++调用Python

C++调用Python

作者:互联网

一 开发环境配置

   先安装python, 自行百度。安装ok后,在安装目录会有python的C头文件,lib,dll, 这些在写C++程序时都会用到。  

   我用的是Python3.7,在VS2015中项目属性配置Python的头文件,库文件

  (1)包含python的头文件:右键项目属性---C/C++ --- 常规 ---- 附加包含目录

  (2)包含lib

二  编写代码

  添加头文件     #include "Python.h“

  加载静态库     #pragma comment(lib, "python37.lib")

  把Hello.py放到程序当前路径, 两个函数,用Pythton写的加法和减法函数。

''''
    简单的Python程序
'''

def Add(a, b):
    c = a + b
    return c

def Sub(a, b):
    c = a - b
    return c

 C++ 代码如下:

/*

C++ 程序如何调用Pyhton程序

*/

#include "stdafx.h"
#include#include "Python.h"

using namespace std;


//导入python静态库
#pragma comment(lib, "python37.lib")

int main()
{
	PyObject* pName = NULL;
	PyObject* pModule = NULL;
	PyObject* pDict = NULL;
	PyObject* pFunc = NULL;
	PyObject* pArgs = NULL;
	PyObject* pRet = NULL;

	// 1 初始化Python, 在使用Python系统前,必须使用Py_Initialize对其进行初始化;
	Py_Initialize();

	// 2 检查初始化是否成功, 返回0初始化失败
	int nRet = Py_IsInitialized();
	if (nRet == 0)
	{
		cout << "Python环境配置错误,初始化失败" << endl;
		return -1;
	}

	// 添加当前路径
	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('./')");

	//3 加载python文件
	pModule = PyImport_ImportModule("Hello");   //在使用这个函数的时候,只需要写Hello.py文件的名称就可以了, 不用写后缀

	if (!pModule)
	{
		cout << "can't find Hello.py" << endl;
		return -1;
	}

	//4 导出Hello.py中的 Add方法
	pFunc = PyObject_GetAttrString(pModule, "Add");

	//5 传参,Add函数有两个参数,传入数量2
	pArgs = PyTuple_New(2);

	//0:表示序号,第一个参数; 1:表示第二个参数
	//i:表示传入的参数类型时int类型
	PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2));  // 2 表示参数2
	PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 4));  // 4 表示参数4

	//6 正式执行Add函数
	PyObject *pReturn = PyEval_CallObject(pFunc, pArgs);

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

	cout << "2 + 4 = " << nResult << endl;

	//7 释放Python
	Py_Finalize();

	system("pause");
	return 0;
}

编译时可能会遇到以下的错误

出现这个错误的原因是:python_d.lib是 库的调试后形式,当我们以debug模式编译工程时,python就用这个lib文件,但是这个文件是不可用 的。对于这点,最快的办法就是强制要求python在任何情况下都是用非调试版本,就可以了。修改python头文件pyconfig.h的配置,修改指向调试库文件的参数,287行的python37_d.lib改为python37.lib,如下图:

F5运行,程序无法运行,缺少python37.dll, 在电脑上找到python37.dll放到Debug目录即可。

标签:调用,lib,Python,C++,PyObject,python,python37,NULL
来源: https://blog.51cto.com/u_12570763/2845441