一、Embedded Python With C/C++主要的目的是讓C/C++所撰寫的程式可以透過特定的方式(Method)

      來運用Python相關的Module,使得Python與C/C++在整合開發上更加的便利。

 

二、Python是由C/C++為基礎所撰寫因此相關的資料結構可以使用Python.h的檔案和相關的函式可以使用

      Python31.lib (Python Ver 3.1.2)

 

三、在C/C++程式中使用Python相關的Module有下列五個步驟:

  3-1 初始化Python的直譯器: Py_Initialize()

   3-2 載入所需的Python Module: 

MODULE_OBJECT = PyImport_importModule("Module Name");

   3-3 查詢和執行所需的Python Method or Attribue:

      取得Attribute名稱:

          ATTRIBUTE_OBJECT = PyObject_GetAttrString(MODULE_OBJECT,"ATTRIBUTE_NAME");

      當回傳的ATTRIBUTE_OBJECT為方法(Method)而不是屬性值的話,則可以使用下列的二種函式來執行

      取得的ATTRIBUTE_OBJECT,下列兩種執行方法(Method)的不同於傳遞的參數類型的不同:

          RUN_RESULT = PyObject_CallFunction (ATTRIBUTE_OBJECT,

                                                                                "PARAM_TYPE",PRARM_VALUE); 

  PRARM_VALUE:C的變數或常數

  PRARM_TYPE:參數的類型符號    

  相關設定的方式可以參考Py_BuildValue的使用方法。   

     or 

   RUN_RESULT = PyObject_CallObject(ATTRIBUTE_OBJECT,PARAM_OBJECT);

           PARAM_OBJECT:為一個Tuple Object物件

 

     Python也提供另一種直接執行Mehtod的方法: 

            RUN_RESULT = PyObject_CallMethod(MODULE_OBJECT,     

                                                         "METHOD_NAME", "PARAM_TYPE",PARAM_VALUE);

            PRARM_VALUE:C的變數或常數

            PRARM_TYPE:參數的類型符號

            相關設定的方式可以參考Py_BuildValue的使用方法。 

3-4 將取得的PyObject物件使用下列的函式轉換成C/C++的資料結構:

3-4.1 PyTuple_Check:

判斷取得的PyObject是否為一PyTuple Object或 subtype of the tupel type

3-4.2 PyTuple_Size: 取得回傳的Tuple Object中包含多少的資料內容。

3-4.3 PyTuple_GetItem: 取得Tuple Object 中指定的資料內容

3-3.4 PyXXX_Check: 檢查PyObject的物件內容為何種資料型別。

1. PyFloat_Check - 判斷是否為float or double的資料型別。

2. PyInt_Check - 判斷是否為整數資料型別。(Python 2.7)

3. PyLong_Check - 判斷是否為長整數資料型別。(Python 3.1)

4. PyString_Check - 判斷是否為字串資料型別。(Python 2.7)

3-3.5 PyArg_Parse:將PyObject依照不同的型別轉換成相對應的C/C++資料型別。

       3-5 關閉Python的直譯器: Py_Finalize()

 

四、範例說明:

由於目前pysqlite已經被整合為Python的標準函式庫,因此本範例藉由pysqlite來讀取

Sqlite的資料庫檔。範例的相關函式說明如下:

4-1、ShowPythonVersion 一 顯示目前使用的Python的版本和 Python API的版本

4-2、ShowSqliteVersion 一 顯示目前使用的pysqlite的版本

4-3、ConnectToDatabase 一 開啟指定的Sqlite資料庫檔案

4-4、CreateCursor 一 建立cursor物件。

4-5、ExecuteSQLSyntax 一 使用cursor物件來執行SQL的語法並回傳查詢的結果

4-6、PrintQueryData 一 顯示查詢的資料的內容


Download:  EmbeddedWithC.Zip

Result:

    設定Include file和Libraries File(Path):

     Project -> Properties -> C/C++ build-> Tools Settings ->

        Include and  Libraries.

   embedded.JPG 

arrow
arrow
    全站熱搜

    yunjuihuang 發表在 痞客邦 留言(0) 人氣()