【问题标题】:How to parse void* to PyObject如何将 void* 解析为 PyObject
【发布时间】:2018-07-25 02:39:01
【问题描述】:

我想为我的 C 函数编写一个包装器,因为我想从 python 代码中调用它。所以我的包装器函数是

static PyObject* my_func_wrapper(PyObject *self, PyObject *args) 
{
    PyObject* obj_Ptr = my_func(); 
    return Py_BuildValue('O', obj_Ptr);
}

我的 C my_func() 没有参数,并且返回转换为 (void *) 的 MyClass 指针。

当我运行我的 setup.py 脚本时,我得到了这个

warning: passing argument 1 of ‘Py_BuildValue’ makes pointer from integer without a cast [-Wint-conversion]
 Py_BuildValue('O', obj_Ptr);

当我从 python 调用 my_func_wrapper 时,返回行中出现 Seg.Fault 错误。

我该如何解决这个问题?

谢谢。

【问题讨论】:

  • "返回 MyClass 指针转换为 (void *)。"你能澄清一下吗?也许显示一个“虚拟”版本的my_func 仍然会重现崩溃。

标签: c python-3.x extension-methods


【解决方案1】:

这里是 Py_BuildValue 的原型:

PyObject *Py_BuildValue(char *format, ...);

所以第一个参数应该是“O”而不是“O”。

我也不确定你的第二个参数:你正在使用 my_func() 结果而不是获取指向此函数的指针。

【讨论】:

  • 感谢您的评论。将“O”更改为“O”后警告消息消失。但是Segfault错误仍然存​​在。
  • 你应该使用 &my_func 而不是 my_func() (指针与函数返回值)
  • 又是同样的问题
  • 我不能帮你更多,因为我不懂python :(
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多