欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

將Python代碼嵌入C++程序進(jìn)行編寫的實例

 更新時間:2015年07月31日 15:56:13   作者:watermelon  
這篇文章主要介紹了將Python代碼嵌入C++程序進(jìn)行編寫的實例,盡管通常還是Python代碼中調(diào)用C++程序的情況較多...需要的朋友可以參考下

把python嵌入的C++里面需要做一些步驟

    安裝python程序,這樣才能使用python的頭文件和庫
    在我們寫的源文件中增加“Python.h”頭文件,并且鏈入“python**.lib”庫(還沒搞清楚這個庫時靜態(tài)庫還是導(dǎo)出庫,需要搞清楚)
    掌握和了解一些python的C語言api,以便在我們的c++程序中使用

常用的一些C API函數(shù)

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

    在調(diào)用任何python的c函數(shù)之前需要調(diào)用的函數(shù),“Py_Initialize”是用來初始化python模塊的,推測是加載初始化加載dll的。對應(yīng)的在使用python模塊之后用“Py_Finalize”來釋放模塊。

PyImport_ImportModule()

    用來載入一個python模塊,這個模塊就是一般的python文件。這里需要注意的是,在加載這個模塊的時候會執(zhí)行模塊里面所有可以執(zhí)行的語句。包括import導(dǎo)入語句和在函數(shù)體之外的所有語句

PyObject_GetAttrString()

    返回模塊里面的函數(shù)

Py_BuildValue()

    建立一個參數(shù)元組,一般都是用這個函數(shù)來建立元組,然后將這個元組作為參數(shù)傳遞給python里面的函數(shù)。

PyEval_CallObject()

    調(diào)用函數(shù),并把“Py_BuildValue”建立的元組作為參數(shù)傳遞給被調(diào)用的函數(shù)

源碼實例

下面的實例是在c++代碼中調(diào)用Python的函數(shù),傳遞參數(shù)并且獲取返回值

test.cpp代碼

#include <iostream>
#include <Python.h>
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)

相關(guān)文章

  • Python排序方法中sort和sorted的區(qū)別詳解

    Python排序方法中sort和sorted的區(qū)別詳解

    在python中常用的排序函數(shù)就是sort()和sorted()這兩個函數(shù),使用 sort() 或內(nèi)建函數(shù) sorted() 對列表進(jìn)行排序,本文將詳細(xì)介紹sorted和sort兩者之間的區(qū)別,感興趣的可以了解一下
    2023-08-08
  • Python輕松查找文本文件最熱門單詞技巧

    Python輕松查找文本文件最熱門單詞技巧

    本文將從文件讀取、文本預(yù)處理到單詞頻率統(tǒng)計,以及性能優(yōu)化和數(shù)據(jù)可視化等方面逐步展開,為你呈現(xiàn)一場深入學(xué)習(xí)的旅程,讓我們一同探索如何用代碼揭示文字中的故事,發(fā)現(xiàn)其中隱藏的信息,從而更好地理解和利用這個數(shù)字化時代的寶藏
    2024-01-01
  • 寫了個監(jiān)控nginx進(jìn)程的Python腳本

    寫了個監(jiān)控nginx進(jìn)程的Python腳本

    接上一文用iptables讓SSH服務(wù)對陌生人說不。還是有點擔(dān)心這個學(xué)期內(nèi),nginx可能會因為系統(tǒng)各種原因而出現(xiàn)異常退出,導(dǎo)致Web服務(wù)暫停。所以,又來了一個方案
    2012-05-05
  • Python 元組拆包示例(Tuple Unpacking)

    Python 元組拆包示例(Tuple Unpacking)

    今天小編就為大家分享一篇Python 元組拆包實例(Tuple Unpacking),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 零基礎(chǔ)學(xué)python應(yīng)該從哪里入手

    零基礎(chǔ)學(xué)python應(yīng)該從哪里入手

    在本篇文章里小編給大家分享的是一篇關(guān)于零基礎(chǔ)學(xué)python應(yīng)該從哪里入手的相關(guān)基礎(chǔ)內(nèi)容,需要的朋友們可以參考下。
    2020-08-08
  • python如何實現(xiàn)向上取整

    python如何實現(xiàn)向上取整

    這篇文章主要介紹了python如何實現(xiàn)向上取整問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 五個Python命令使用的小妙招分享

    五個Python命令使用的小妙招分享

    平常在使用python命令過程中,基本上都是用來安裝python庫時才使用到在控制臺的python命令。然而,python命令還有更多的妙用,本文就來為大家詳細(xì)講講
    2022-07-07
  • 詳細(xì)解讀python操作json文件的詳細(xì)

    詳細(xì)解讀python操作json文件的詳細(xì)

    這篇文章主要為大家介紹了python操作json文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Python實現(xiàn)將通信達(dá).day文件讀取為DataFrame

    Python實現(xiàn)將通信達(dá).day文件讀取為DataFrame

    今天小編就為大家分享一篇Python實現(xiàn)將通信達(dá).day文件讀取為DataFrame,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python計數(shù)排序和基數(shù)排序算法實例

    python計數(shù)排序和基數(shù)排序算法實例

    這篇文章主要介紹了python計數(shù)排序和基數(shù)排序算法實例,需要的朋友可以參考下
    2014-04-04

最新評論