如何将单个PyObject(在C+;+;后端创建)传递给嵌入式Python解释器?
您好,我正在编写一个新的Python类型,定义如下:如何将单个PyObject(在C+;+;后端创建)传递给嵌入式Python解释器?,python,c++,c,Python,C++,C,您好,我正在编写一个新的Python类型,定义如下: typedef struct { PyObject_HEAD /* Type-specific fields go here. */ int * value } Noddy; 我还定义了所需的所有其他方法和属性,如中所述: 问题是,我可以在Python中创建和使用我的新对象,没有任何问题,但是当我试图在C中创建对象时,我无法传输到Python解释器。我在C++中使用后端,Python是嵌入的,然后扩展(扩展嵌入式P
typedef struct
{
PyObject_HEAD
/* Type-specific fields go here. */
int * value
} Noddy;
我还定义了所需的所有其他方法和属性,如中所述:
问题是,我可以在Python中创建和使用我的新对象,没有任何问题,但是当我试图在C中创建对象时,我无法传输到Python解释器。我在C++中使用后端,Python是嵌入的,然后扩展(扩展嵌入式Python)以提供进一步的脚本功能。
主要的一点是当我创建PyObject时:
PyObject * pNoddy;
// Create Object
pNoddy= _PyObject_New(&pynoddy_PyNoddyType);
// Initialize Object.
pNoddy= PyObject_Init(pNoddy, &pynoddy_PyNoddyType);
现在在pNoddy上,我有一个前面定义的PyObject类型。我想把它加载到我的Python解释器中。为此,我尝试了以下代码,但它崩溃了
PyObject *pValue, *pFunc;
// ("addNoddy") is a function defined in Python.
pFunc = PyString_FromString("addNoddy");
// VM is the main module of my system. pNoddy is the PyObject.
pValue = PyObject_CallMethodObjArgs(VM, pFunc, pNoddy);
/********************* NEVER REACH THIS POINT **********************/
Py_DECREF(pValue);
您需要像这样调用PyObject\u CallMethodObjArgs
pValue = PyObject_CallMethodObjArgs(VM, pFunc, pNoddy, NULL);
从文档中:
PyObject*PyObject\u CallMethodObjArgs(PyObject*o,PyObject*name,…,NULL)
返回值:新引用。调用对象o的一个方法,其中该方法的名称作为名称中的Python字符串对象给出。信息技术
使用数量可变的PyObject*参数调用。争论
作为参数的可变数量提供,后跟NULL。
成功时返回调用结果,失败时返回NULL