在c++程式中調用python指令碼函數

來源:互聯網
上載者:User
在c++中調用python指令碼函數的代碼架構如下: 1    Py_Initialize();      //初始化 python interpreter
 2
 3    PyObject *pName = PyString_FromString("test1");   //   python指令檔名
 5    PyObject *pModule = PyImport_Import(pName);   //   import 指令碼,返回pModule
                                                                                                     //   pModule指向這個指令碼對象 
 7    if ( !pModule )
 8{
 9        cout<<"Can't find the file!"<<endl;
10        return 0;
11    }
12
14    cout<<"Get the function in .py"<<endl;    
15    PyObject *pDict = PyModule_GetDict(pModule);   //   通過pModule得到dictionary
                                                                                                       //   的指標pDict
16    PyObject *pFunc = PyDict_GetItemString(pDict,"Add");   //   通過pDict得到你所需的
                                                                                                       //    function,此處"Add"為test1.py
                                                                                                       //    的一個funciton object
17    PyObject *pParam = PyTuple_New(1);                       //    填寫function所需要的參數
18    PyObject *pCurParam = PyInt_FromLong(10);
19    PyTuple_SET_ITEM(pParam,0,pCurParam);
20    PyObject *pAdded = PyObject_CallObject(pFunc,pParam);//   調用此function,並得到
                                                                                                       //    傳回值
21    int max = PyInt_AsLong(pAdded);                              //    將傳回值轉換為c++的資料類型
22    cout<<"after added ,the number is "<<max<<endl;
23
24    Py_XDECREF(pAdded);                  //   引用計數減一
25    Py_XDECREF(pCurParam);
26    Py_XDECREF(pParam);
27//    Py_XDECREF(pFunc);
28//    Py_XDECREF(pDict);
29    Py_XDECREF(pModule);
30    Py_XDECREF(pName);
31
32    Py_Finalize();         //   關閉 python interpreter

這裡有幾個問題,目前還沒有解決:
1).   我使用的是python25_d.dll,無法找到用activepython編輯的*.py檔案中的function object 。我的activepython版本為2.4。
2).  程式末尾不能將 function object 和 dictionary object 的引用計數減一,如果執行此操作,程式會crash。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.