VC調用Python【轉】


來自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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM