c++调用python函数

c++调用python函数
1.当取多个返回值时,如下:
def  mix(a, b) :  
    r1 
=  a  +  b  
    r2 
=  a  -  b  
    
return  (r1, r2)  #  (7,3)

c++代码如下:
#include " python.h "
int _tmain( int argc, _TCHAR * argv[])
{
string filename = "cal"; // cal.py
string methodname_mix = "mix"; // function name

Py_Initialize();

// load the module
PyObject * pyFileName = PyString_FromString(filename.c_str());
PyObject
* pyMod = PyImport_Import(pyFileName);

// load the function
PyObject * pyFunc_mix = PyObject_GetAttrString(pyMod, methodname_mix.c_str());

// test the function is callable
if (pyFunc_mix && PyCallable_Check(pyFunc_mix))
{
PyObject
* pyParams = PyTuple_New(2);
PyTuple_SetItem(pyParams,
0, Py_BuildValue("i", 5));
PyTuple_SetItem(pyParams,
1, Py_BuildValue("i", 2));

// ok, call the function
int r1 = 0, r2 = 0;
PyObject
* pyValue = PyObject_CallObject(pyFunc_mix, pyParams);
PyArg_ParseTuple(pyValue,
"i|i", &r1, &r2);
if (pyValue)
{
printf(
"%d,%d\n", r1, r2); //output is 7,3
}

}

 
Py_Finalize();

return 0;
}

2.如果返回一个值时:
import string

def AddMult(a, b):
c
= a + b
print c
return c


c++代码如下: 
PyObject * pModule = NULL;
PyObject
* pFunc = NULL;
PyObject
* pArgs = NULL;
PyObject
* pRet = NULL;

Py_Initialize();

PyRun_SimpleString(
" import sys " );
PyRun_SimpleString(
" sys.path.append('./') " );

pModule
= PyImport_ImportModule( " httpsend " );
pFunc
= PyObject_GetAttrString(pModule, " AddMult " );

// pArgs = Py_BuildValue("s, s", "This is ", "a python code");

pArgs
= Py_BuildValue( " ii " , 12 , 34 );

pRet
= PyObject_CallObject(pFunc,pArgs);
int pyResult = 0 ,pyResult2 = 0 ;
char * str;
int argRet = PyArg_Parse(pRet, " i " , & pyResult);
if (argRet)
{
printf(
"yes!\n");
}

else
{
//错误
printf("error!\n");
}


if (pModule)
Py_DECREF(pModule);
if (pFunc)
Py_DECREF(pFunc);
if (pArgs)
Py_DECREF(pArgs);
if (pRet)
Py_DECREF(pRet);


// PyGILState_Ensure();
Py_Finalize();


你可能感兴趣的:(c++调用python函数)