1.环境。windows7 64位操作系统、Python3.5.2 64位、VS2013
2.配置工程。
2.1将Python目录下的Include、libs文件夹拷贝到跟.vcxproj 同一个目录。
工程----属性----C/C++ 常规----附加包含目录----Include
工程----属性----链接器 常规--- 附加库目录------libs
2.2 工程----属性----链接器 输入----附加依赖项------添加_tkinter.lib;python3.lib;python35.lib;
2.3将Python安装目录下的DLLs、Lib文件夹以及python3.dll、python35.dll、vcruntime140.dll 拷贝到同exe同一个目录
3.C++ 代码
4.Python代码
5.执行。报错了,如图
6.修改C++代码:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <process.h>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
using namespace std;
extern "C"
{
#include "Python.h"
}
int _tmain(int argc, _TCHAR* argv[])
{
Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
PyObject * pModule = NULL;//声明变量
PyObject * pFunc = NULL;// 声明变量
//PyObject * pFunc_SetCallBack = NULL;// 声明变量
PySys_SetArgv(argc, argv);
PyRun_SimpleString("import sys\nprint(sys.argv)");
PyRun_SimpleString("import os");
PyRun_SimpleString("import sys;");
PyRun_SimpleString("sys.path.append('../x64/Release')");
pModule = PyImport_ImportModule("1");//这里是要调用的文件名
if (pModule == NULL || PyErr_Occurred()){
PyErr_Print();
}
else{
pFunc = PyObject_GetAttrString(pModule, "Test");//这里是要调用的函数名
/*pFunc_SetCallBack = PyObject_GetAttrString(pModule, "Set_Callback");
PyObject *pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, Py_BuildValue("l", (long)CallBack));
PyEval_CallObject(pFunc_SetCallBack, pArgs);*/
PyEval_CallObject(pFunc, NULL);//调用函数
}
Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
return 0;
}