您好我正在编写一个新的Python类型,如下所示:
typedef struct
{
PyObject_HEAD
/* Type-specific fields go here. */
int * value
} Noddy;
我还定义了所需的所有其他方法和属性,如:https://docs.python.org/2/extending/newtypes.html中所述。
问题是我可以毫无问题地在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);
答案 0 :(得分:2)
你需要像这样调用PyObject_CallMethodObjArgs
pValue = PyObject_CallMethodObjArgs(VM, pFunc, pNoddy, NULL);
来自文档:
PyObject * PyObject_CallMethodObjArgs(PyObject * o,PyObject * name,...,NULL)
返回值:新参考。调用对象o的方法,其中方法的名称作为名称中的Python字符串对象给出。它 使用可变数量的PyObject *参数调用。争论 作为可变数量的参数提供,后跟NULL 。 返回成功时调用的结果,或失败时返回NULL。