1. 安装Python环境
2. 编写python脚本
新建python脚本文件pytest.py
# pytest.py
def add(a,b):
print("in python function add")
print("a = " + str(a))
print("b = " + str(b))
print("ret = " + str(a+b))
3. 编写用来调用Python脚本的C++程序
VS中新建一个C++项目,添加一个文件main.cpp
// main.cpp
#include <python.h>
#include <iostream>
int main(int argc, char* argv[])
{
// init python
Py_Initialize();
if (!Py_IsInitialized())
return -1;
// load python script
PyObject* pName = PyUnicode_FromString("pytest");
PyObject* pModule = PyImport_Import(pName);
if (!pModule) {
std::cout << "can't find py_test.py" << std::endl;
return -1;
}
//
PyObject* pDict = PyModule_GetDict(pModule);
if (!pDict) {
return -1;
}
// get "add" function
PyObject* pFunc = PyDict_GetItemString(pDict, "add");
if (!pFunc || !PyCallable_Check(pFunc)) {
std::cout << "can't find function [add]" << std::endl;
return -1;
}
// parameter
PyObject *pArgs = PyTuple_New(2);
PyTuple_SetItem(pArgs, 0, Py_BuildValue("l", 3));
PyTuple_SetItem(pArgs, 1, Py_BuildValue("l", 4));
// call python script
PyObject_CallObject(pFunc, pArgs);
//
Py_DECREF(pName);
Py_DECREF(pArgs);
Py_DECREF(pModule);
// close python
Py_Finalize();
return 0;
}
4. 配置项目属性
- 将python的头文件(比如 C:\Users\Kyle\Anaconda3\include)添加到, 项目属性页->VC++目录-> 包含目录。
- 将python.lib文件(比如 C:\Users\Kyle\Anaconda3\libs\python35.lib)添加到,配置->链接器->输入->附加依赖项。
5. 修改pyconfig.h文件
找到C:\Users\Kyle\Anaconda3\include\pyconfig.h文件,打开文件,搜索python35_d.lib,将
# if defined(_DEBUG)
# pragma comment(lib,"python35_d.lib")
修改为
# if defined(_DEBUG)
# pragma comment(lib,"python35.lib")
再搜索Py_DEBUG,将
#ifdef _DEBUG
# define Py_DEBUG
#endif
修改为
#ifdef _DEBUG
//# define Py_DEBUG
#endif
6. 修改C++解决方案平台
如果python为64位。则需要将C++项目的解决方案平台修改为x64。