1. 程式人生 > >筆記:MFC呼叫Python3.4

筆記:MFC呼叫Python3.4

以前寫的程式存一下.呼叫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();
}