我有一个用C ++编写的python扩展模块,它包含多个函数。其中一个生成一个自定义结构的实例,然后我想在Python中使用我的模块的其他函数,如下所示
import MyModule
var = MyModule.genFunc()
MyModule.readFunc(var)
为此,我尝试使用PyCapsule对象在Python和C之间传递指向这些对象的指针,但是当尝试在第二个C函数中读取它们时会产生错误(" PyCapsule_GetPointer调用无效的PyCapsule对象")。但是,如果要求打印PyCapsule对象(var),则可以正确地将其标识为"''胶囊对象" testcapsule"'。我的C代码如下所示:
struct MyStruct {
int value;
};
static PyObject* genFunc(PyObject* self, PyObject *args) {
MyStruct var;
PyObject *capsuleTest;
var.value = 1;
capsuleTest = PyCapsule_New(&var, "testcapsule", NULL);
return capsuleTest;
}
static PyObject* readFunc(PyObject* self, PyObject *args) {
PyCapsule_GetPointer(args, "testcapsule");
return 0;
}
感谢您的帮助。
答案 0 :(得分:1)
如同您对问题的评论中所述,从本地变量MyStruct var
读取数据时会遇到问题。为此,您可以使用第三个析构函数PyCapsule_New
。
但这不是你刚才问题的原因。您在PyCapsule_GetPointer(args, "testcapsule")
参数上使用args
。由于它不是一个包,即使var
是一个,你可能已经将该函数的签名定义为METH_VARARGS
。相反,您需要解压缩元组或使用METH_O
。