笔记:MFC调用Python3.4

时间:2021-08-08 18:32:27
 

以前写的程序存一下.调用python3.4的

有时会提示LNK1104: 无法打开文件“python34_d.lib”的错误

把“pyconfig.h"的文件改了: ifdefined(_DEBUG)

pragmacomment(lib,"python34.lib")

调用程序过程如下:

     //调用python脚本所需的头文件

#include "Python.h"
...
//初始化
Py_Initialize();
if(!Py_IsInitialized())MessageBox(_T("初始化失败!"),_T("警告"),MB_OK);else{
//调用python脚本的各项命名,初始化
PyObject*pname=NULL,*pModule,*pDict,*pFunc=NULL;
std::wstring str=L"WrittennPython";//python 文件名:WrittennPython
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
//将wstring类型转为string类型
std::string sr=conv.to_bytes(str);
//调用python文件,并未用到,忘了干什么用的笔记:MFC调用Python3.4
pname=PyUnicode_FromUnicode(str.c_str(),str.size());
//导入脚本
pModule=PyImport_ImportModule(sr.c_str());

if(!pModule)
MessageBox(_T("Cannot find WrittennPython.py!"),_T("警告"),MB_OK);
//python文件函数导入
pDict=PyModule_GetDict(pModule);
if(!pDict)
return;
//得到函数名称,该函数无需参数输入
pFunc=PyDict_GetItemString(pDict,"handwritingClassTest");
if(!pFunc||!PyCallable_Check(pFunc))
{
MessageBox(_T("Cannot find function [handwritingClassTest]!"),_T("警告"),MB_OK);
return;
}
int n=-1;
//调用函数,并得到最终的结果,转为int类型
n=_PyLong_AsInt(PyObject_CallObject(pFunc,NULL));

s=_T("识别出的结果为:"),s1=_T("");
s1.Format(_T("%d"),n);
s+=s1;
MessageBox(s,_T("识别结果"),MB_OK);
//调用结束,销毁脚本调用
PyErr_Clear();
Py_Finalize();
}