MFC中调用Python

VS项目设置,设置编译环境

 

1. c++调用python需要在vs2010中的cpp文件中加入,这个头文件在python安装目录Python\include下

要成功引入就要把Python.h的头文件目录(如D:\python3.4.2\include放在菜单 > 项目 > 属性 > C/C++ > 常规 > 附加包含目录下

(或者右键项目)

MFC中调用Python_第1张图片

 

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,要再进去设置,否则设置不成功。

MFC中调用Python_第2张图片

 

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,基本要默认为这两项才可以,不然可尝试多种平台组合方案

 

MFC中调用Python_第3张图片

 

 

代码例子

 

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 ;
}

 

深圳程序员交流群550846167

 

你可能感兴趣的:(mfc)