將Python代碼嵌入C++程式進行編寫的執行個體

來源:互聯網
上載者:User
把python嵌入的C++裡面需要做一些步驟

安裝python程式,這樣才能使用python的標頭檔和庫
在我們寫的源檔案中增加“Python.h”標頭檔,並且鏈入“python**.lib”庫(還沒搞清楚這個庫時靜態庫還是匯出庫,需要搞清楚)
掌握和瞭解一些python的C語言api,以便在我們的c++程式中使用

常用的一些C API函數

在瞭解下面的函數之前有必要瞭解一下**PyObject***指標,python裡面幾乎所有的對象都是使用這個指標來指示的。
Py_Initialize()&&Py_Finalize()

在調用任何python的c函數之前需要調用的函數,“Py_Initialize”是用來初始化python模組的,推測是載入初始化載入dll的。對應的在使用python模組之後用“Py_Finalize”來釋放模組。

PyImport_ImportModule()

用來載入一個python模組,這個模組就是一般的python檔案。這裡需要注意的是,在載入這個模組的時候會執行模組裡面所有可以執行的語句。包括import匯入語句和在函數體之外的所有語句

PyObject_GetAttrString()

返回模組裡面的函數

Py_BuildValue()

建立一個參數元組,一般都是用這個函數來建立元組,然後將這個元組作為參數傳遞給python裡面的函數。

PyEval_CallObject()

調用函數,並把“Py_BuildValue”建立的元組作為參數傳遞給被調用的函數

源碼執行個體

下面的執行個體是在c++代碼中調用Python的函數,傳遞參數並且擷取傳回值

test.cpp代碼

#include #include using namespace std;int main(int argc, char* argv[]){  Py_Initialize();  //初始化  PyObject* pModule = NULL;  PyObject* pFunc = NULL;  PyObject* pParam = NULL;  PyObject* pResult = NULL;  const char* pBuffer = NULL;  int iBufferSize = 0;  pModule = PyImport_ImportModule(“test_python");  if (!pModule)  {    cout << "get module failed!" << endl;    exit (0);  }  pFunc = PyObject_GetAttrString(pModule, "main");  if (!pFunc)  {    cout << "get func failed!" << endl;    cout << int(pFunc) << endl;    exit (0);  }  pParam = Py_BuildValue("(s)", "HEHEHE");  pResult = PyEval_CallObject(pFunc,pParam);  if(pResult)  {    if(PyArg_Parse(pResult, "(si)", &pBuffer, iBufferSize))    {      cout << pBuffer << endl;      cout << iBufferSize << endl;    }  }  Py_DECREF(pParam);  Py_DECREF(pFunc);  Py_Finalize();  //cout << "hello" << endl;  return 0;}

test_python.py代碼

def main(szString):  return ("hello", 5)
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.