2014-01-06 2 views
1

Я пишу небольшую программу с Python C/API, которая в основном вызывает простой скрипт Python. Вот код:Python C/API назначает переменную C++

#include <Python.h> 

PyObject *pName, *pModule, *pDict, *pFunc; 

int main() { 

    Py_Initialize(); 
    pName = PyString_FromString("simplemodule"); 
    pModule = PyImport_Import(pName); 
    pDict = PyModule_GetDict(pModule); 
    pFunc = PyDict_GetItemString(pDict, "simplefunction"); 

    if(PyCallable_Check(pFunc)) { 

     PyObject_CallObject(pFunc, NULL); 


    } else { 

     PyErr_Print(); 

    } 

    Py_DECREF(pName); 
    Py_DECREF(pModule); 

    Py_Finalize(); 

    return 0; 
} 

Теперь, вот код для simplemodule.py:

def simplefunction(): 
    m = 5*5 
    return m 

Мой вопрос: Как я могу присвоить переменной м в переменную C++, так Я могу использовать его в C++?

ответ

2

Используйте PyInt_AsLong, чтобы преобразовать возвращаемое значение в C длинным.

... 
if (PyCallable_Check(pFunc)) { 
    PyObject *res = PyObject_CallObject(pFunc, NULL); 
    if (res != NULL) { 
     long n = PyInt_AsLong(res); // <--------- 
     cout << n << endl; 
    } else { 
     PyErr_Print(); 
    } 
    ... 
+0

Спасибо! Он работает отлично. И если функция модуля возвращает строку, я должен использовать что-то вроде 'PyString_AsString'? – jndok

+0

@jndok, Да, используйте ['PyString_AsString'] (http://docs.python.org/2/c-api/string.html#PyString_AsString). BTW, он возвращает 'char *', а не C++ 'string'. – falsetru

Смежные вопросы