如何得到python中调用c++函数的返回值

时间:2021-10-04 00:11:04
用PyObject_CallObject(..)方法调用add.py文件中的main函数.
add.py文件如下:

import user
def initialize():
    return
def main(base,plus):
user.Add(base,plus)
return

C++文件中的add方法:
PyObject* Add( PyObject *self, PyObject *args )
{
int xx;
int yy;
int zz;
if (!PyArg_ParseTuple(args, "i|i", &xx,&yy))
return NULL;
zz = xx+yy;
return Py_BuildValue("i", zz);
}

主函数调用:
         int x = 5;
int y = 10;
PyObject* _pArgs;
_pArgs = Py_BuildValue("(ii)", x,y);
int z = 0;
PyObject* _pResult = PyObject_CallObject("main",_pArgs);
我怎样才能得到python执行后的值?比如z=x+y=15;



1 个解决方案

#1


不太清楚你的详细意思
是要写个python的C++ extension?
写一个cpp文件, 比如叫   abc.cpp
//abc.cpp
#include "Python.h"


PyObject* _user_add( PyObject *self, PyObject *args )
{
int xx;
int yy;
int zz;
if (!PyArg_ParseTuple(args, "i|i", &xx,&yy))
   return NULL;
zz = xx+yy;
return Py_BuildValue("i", zz);
}
static PyMethodDef User_Methods[] = {
    {"add",  _user_add, METH_VARARGS,
     "add two numbers."},
    {NULL, NULL, 0, NULL}        /* Sentinel */
};

PyMODINIT_FUNC
inituser(void)
{
    (void) Py_InitModule("user", User_Methods);
}

然后写一个setup.py
# setup.py
import distutils
from distutils.core import setup, Extension
module_user = Extension("user", sources = ["abc.cpp"])

setup(name = "My User Extension",
       version = "1.0",
      ext_modules = [module_user])

然后编译安装这个c++扩展
python setup.py install

应该就可以用了
>>> import user
>>> user.add(8,9)
试试看噢。 

#1


不太清楚你的详细意思
是要写个python的C++ extension?
写一个cpp文件, 比如叫   abc.cpp
//abc.cpp
#include "Python.h"


PyObject* _user_add( PyObject *self, PyObject *args )
{
int xx;
int yy;
int zz;
if (!PyArg_ParseTuple(args, "i|i", &xx,&yy))
   return NULL;
zz = xx+yy;
return Py_BuildValue("i", zz);
}
static PyMethodDef User_Methods[] = {
    {"add",  _user_add, METH_VARARGS,
     "add two numbers."},
    {NULL, NULL, 0, NULL}        /* Sentinel */
};

PyMODINIT_FUNC
inituser(void)
{
    (void) Py_InitModule("user", User_Methods);
}

然后写一个setup.py
# setup.py
import distutils
from distutils.core import setup, Extension
module_user = Extension("user", sources = ["abc.cpp"])

setup(name = "My User Extension",
       version = "1.0",
      ext_modules = [module_user])

然后编译安装这个c++扩展
python setup.py install

应该就可以用了
>>> import user
>>> user.add(8,9)
试试看噢。