來自http://blog.csdn.net/up5p5mm/article/details/2613854
1.首先安裝好python庫,設置好相應的include和lib路徑:把“PythonWin/include”加入包含路徑,把“PythonWin/libs"加入附加庫路徑,然后在調用python的cpp頭中加入:#include "python.h"
2.調用Py_Initialize初始化python解析器環境
3.在c中,python所有對象都是PyObject,常用PyObject *.
4.要把python中的數據類型轉化成C中的數據類型,才能在C中使用,同樣,返回給python的數據結構也要轉成PyObject才能在python中使用(一般返回PyObject*)
5.使用Py_IsInitialized判斷python解析器環境是否初始化成功
6.用PyRun_SimpleString執行python命令行,如:
PyRun_SimpleString("import sys")
返回0表示執行成功
7.PyObject pObj = PyInitModel("test2",NoticeFunc)等於把NoticeFunc對應的"函數映射數組"映射到python的test2模塊中,返回模塊地址
為NULL表示映射失敗
NoticeFunc定義為一個結構體數組:
PyMethodDef NoticeFunc[] = { {"MaxP",MaxC,METH_VARARGS,"Maxof two args"}, ....... }
其中MaxP是python中函數名,MaxC是c中回調函數名(實際調用的是它)。METH_VARARGS是參數傳遞方
式,表示通過元組傳遞參數,METH_KEYWORD表示通過字典傳遞參數
映射成功后,我們用:
PyRun_SimpleString("import test2");
PyRun_SimpleString("print test2.MaxP(1,3)");
可以執行MaxP函數,表示test2已經植入解析器中
8.Py_BuildValue("i",2003)把2003轉化成python中的數據類型,返回一個PyObject*,可用PyInt_Check檢查它
是否已經轉化成了Python中的int
9.C中每產生一個PyObject,此對象的引數就加1,此對象的引數為0時,解析器會釋放內存,可用Py_DECREF
()將一個對象的引數減一,如果一個Python對象是返回
到Python解析器里去,就不要調用Py_DECREF了,如果是Python返回給C使用,則用完后要用此宏自減引用數 10.返回Py_None時要先自加一次:
Py_INCREF(Py_None);
return Py_None;
如果不自加,解析器對Py_None對象的引數為0(實際是1),則Py_None返回給Python解析器后用完不會釋放。
11.用PyArg_ParseTuple(argvs,"ii",&a,&b)把pyton的元組解析成兩個整數。
12.// 清除Python解析環境
Py_Finalize();