gpt4 book ai didi

python - 在 C 和 Python 之间传递 C++ 指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:53 48 4
gpt4 key购买 nike

我有一个用 C++ 编写的 python 扩展模块,其中包含多个函数。其中之一生成自定义结构的实例,然后我想在 Python 中将其与模块的其他函数一起使用,如下所示

import MyModule
var = MyModule.genFunc()
MyModule.readFunc(var)

为此,我尝试使用 PyCapsule 对象在 Python 和 C 之间传递指向这些对象的指针,但是当尝试在第二个 C 函数中读取它们时会产生错误(“使用无效的 PyCapsule 对象调用 PyCapsule_GetPointer”) .然而,如果要求 Python 打印 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;
}

感谢您的帮助。

最佳答案

如对您的问题的评论所述,从局部变量 MyStruct var 读取数据时会遇到问题。为此,您可以使用 PyCapsule_New 的第三个析构函数。

但这不是你刚才出现问题的原因。您在 args 参数上使用了 PyCapsule_GetPointer(args, "testcapsule")。由于它不是胶囊,即使 var 是一个胶囊,您也可以将函数的签名定义为 METH_VARARGS。相反,您需要解压缩元组或使用 METH_O

关于python - 在 C 和 Python 之间传递 C++ 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38825958/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com