c++ 調用python2類獲取返回值

 

vs2017好像沒有

    PyObject* PyIns = PyInstance_New(pyCls, NULL, NULL); // 創建tester類

 

前面介紹了用python調用C++時用swig工具,現在簡單介紹一下C++調用python並取返回值的過程

python文件test.py

class tester:
    def add(self, a, b):
        return a + b

新建一個VS控制檯項目
main.cpp所有的源碼如下:

#include <stdio.h>
#include <python.h>
#include <windows.h>
void main()
{
    Py_Initialize(); // 初始化python虛擬機
    PyObject* pyMod  = PyImport_ImportModule("test"); //  加載test.py文件
    PyObject* pyDict = PyModule_GetDict(pyMod); //  獲取test模塊中的字典
    PyObject* pyCls = PyDict_GetItemString(pyDict, "tester"); // 從字典中查找tester類
    PyObject* PyIns = PyInstance_New(pyCls, NULL, NULL); // 創建tester類
    PyObject* pyRet = PyObject_CallMethod(pyIns, "add", "ii", 5, 6); // 調用tester.add方法,傳入2個int型參數
    int ok = -1;
    int retok = PyArg_Parse(pyRet, "i", &ok); // 從返回值從取出int型返回值
    Py_Finalize();
    system("pause");
}
整個過程最重要的是  PyBoject_CallMethod,傳入的參數類型一定不能搞錯。還有取返回值的時候PyArg_Parse取單個返回值,要是取多個的可以用
PyArg_ParseTuple,要取的類型也必須完全匹配。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章