1. c++调用python需要在vs2010中的cpp文件中加入<Python.h>,这个头文件在python安装目录Python\include下
要成功引入就要把Python.h的头文件目录(如D:\python3.4.2\include放在菜单 > 项目 > 属性 > C/C++ > 常规 > 附加包含目录下
(或者右键项目)
2. 还需要一个python34.lib,如果不导入的话,会提示你出现这个文件的缺失。文件在python\libs下,找到此文件之后进入VS2010,菜单 >项目 > 属性 > 配置属性 > VC++目录 > 库目录,把刚才的绝对路径(如D:\python3.4.2\libs)添加进去,此时变成这样的了:D:\python3.4.2\libs;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib。这样就可以在VC程序中执行python文件了。
或者把D:\python3.4.2\libs放进项目 > 属性 > 配置属性 > 链接器 > 常规 > 附加库目录中。
Note: 上面的设置是对某个模式生效,如果将运行模式从debug改成了release,要再进去设置,否则设置不成功。
Debug模式下,python/libs目录下的Python34.lib需要复制并重名为Python34_d.lib的形式
对python头文件python/include/pyconfig.h进行修改:
# if defined(_DEBUG)
# pragma comment(lib,"python34_d.lib")
# elif defined(Py_LIMITED_API)
# pragma comment(lib,"python3.lib")
# else
# pragma comment(lib,"python34.lib")
# endif /* _DEBUG */
将DEBUG条件下的lib由python34_d.lib改为python34.lib.
# if defined(_DEBUG)
# pragma comment(lib,"python34.lib")
配置管理器修改
活动解决方案配置为Debug,活动解决方案平台为x64,基本要默认为这两项才可以,不然可尝试多种平台组合方案
代码例子
void CMakeSimulateDlg::CallPython(CString &strFilePath)
{
string filename="dealFile";
string methodname = "getFileAfter";
string expression = strFilePath.GetBuffer();
Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
PyObject * pModule = NULL;//声明变量
PyObject * pFunc = NULL;// 声明变量
PyObject * pArgs = NULL;//声明变量
PyObject * pRet = NULL;//声明变量
PyObject * pyFileName = PyString_FromString(filename.c_str());
PyObject * pyMod = PyImport_Import(pyFileName);
PyObject * pyFunc_mix = PyObject_GetAttrString(pyMod, methodname.c_str());
PyObject * pyParam = PyTuple_New(1);
PyObject * pyValue = PyString_FromString(expression.c_str());
PyTuple_SetItem(pyParam, 0, pyValue);
pRet = PyObject_CallObject(pyFunc_mix, pyParam);
Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
return ;
}