C++调用Python

释放双眼,带上耳机,听听看~!

一 开发环境配置

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

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

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

C++调用Python

  (2)包含lib

C++调用Python

二  编写代码

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

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

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


1
2
3
4
5
6
7
8
9
10
11
12
1''''
2    简单的Python程序
3'''
4
5def Add(a, b):
6    c = a + b
7    return c
8
9def Sub(a, b):
10    c = a - b
11    return c
12

 C++ 代码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
1/*
2
3C++ 程序如何调用Pyhton程序
4
5*/
6
7#include "stdafx.h"
8#include <iostream>
9#include "Python.h"
10
11using namespace std;
12
13
14//导入python静态库
15#pragma comment(lib, "python37.lib")
16
17int main()
18{
19  PyObject* pName = NULL;
20  PyObject* pModule = NULL;
21  PyObject* pDict = NULL;
22  PyObject* pFunc = NULL;
23  PyObject* pArgs = NULL;
24  PyObject* pRet = NULL;
25
26  // 1 初始化Python, 在使用Python系统前,必须使用Py_Initialize对其进行初始化;
27  Py_Initialize();
28
29  // 2 检查初始化是否成功, 返回0初始化失败
30  int nRet = Py_IsInitialized();
31  if (nRet == 0)
32  {
33      cout << "Python环境配置错误,初始化失败" << endl;
34      return -1;
35  }
36
37  // 添加当前路径
38  PyRun_SimpleString("import sys");
39  PyRun_SimpleString("sys.path.append('./')");
40
41  //3 加载python文件
42  pModule = PyImport_ImportModule("Hello");   //在使用这个函数的时候,只需要写Hello.py文件的名称就可以了, 不用写后缀
43
44  if (!pModule)
45  {
46      cout << "can't find Hello.py" << endl;
47      return -1;
48  }
49
50  //4 导出Hello.py中的 Add方法
51  pFunc = PyObject_GetAttrString(pModule, "Add");
52
53  //5 传参,Add函数有两个参数,传入数量2
54  pArgs = PyTuple_New(2);
55
56  //0:表示序号,第一个参数; 1:表示第二个参数
57  //i:表示传入的参数类型时int类型
58  PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2));  // 2 表示参数2
59  PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 4));  // 4 表示参数4
60
61  //6 正式执行Add函数
62  PyObject *pReturn = PyEval_CallObject(pFunc, pArgs);
63
64  int  nResult;
65  PyArg_Parse(pReturn, "i", &nResult);  //i表示转换成int型变量
66
67  cout << "2 + 4 = " << nResult << endl;
68
69  //7 释放Python
70  Py_Finalize();
71
72  system("pause");
73  return 0;
74}
75

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

C++调用Python

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

C++调用Python

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

给TA打赏
共{{data.count}}人
人已打赏
安全技术

node.js – JWT有效负载应该有多少信息?

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索