一 开发环境配置
先安装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写的加法和减法函数。
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
编译时可能会遇到以下的错误
出现这个错误的原因是:python_d.lib是 库的调试后形式,当我们以debug模式编译工程时,python就用这个lib文件,但是这个文件是不可用 的。对于这点,最快的办法就是强制要求python在任何情况下都是用非调试版本,就可以了。修改python头文件pyconfig.h的配置,修改指向调试库文件的参数,287行的python37_d.lib改为python37.lib,如下图:
F5运行,程序无法运行,缺少python37.dll, 在电脑上找到python37.dll放到Debug目录即可。