如何将void *解析为PyObject

时间:2018-07-24 18:31:41

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

我想为我的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()没有参数,并且将MyClass指针转换为(void *)。

当我运行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时,在返回行中出现段错误错误。

我该如何解决?

谢谢。

1 个答案:

答案 0 :(得分:1)

这是Py_BuildValue的原型:

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

因此,第一个参数应为“ O”而不是“ O”。

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