筆記:MFC呼叫Python3.4
阿新 • • 發佈:2019-01-29
以前寫的程式存一下.呼叫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檔案,並未用到,忘了幹什麼用的 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();
}