首页 > 解决方案 > 如何将 void* 解析为 PyObject

问题描述

我想为我的 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 错误。

我怎样才能解决这个问题?

谢谢。

标签: cpython-3.xextension-methods

解决方案


这是 Py_BuildValue 的原型:

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

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

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


推荐阅读