C++调用Python

C++调用Python,第1张

概述一开发环境配置  先安装python,自行百度。安装ok后,在安装目录会有python的C头文件,lib,dll,这些在写C++程序时都会用到。    我用的是Python3.7,在VS2015中项目属性配置Python的头文件,库文件 (1)包含python的头文件:右键项目属性---C/C++ ---常规----附加包含目录 (2)包 一 开发环境配置

   先安装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 cdef 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目录即可。

总结

以上是内存溢出为你收集整理的C++调用Python全部内容,希望文章能够帮你解决C++调用Python所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1185397.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存