c - 如何将 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 错误。
我怎样才能解决这个问题?
谢谢。
解决方案
这是 Py_BuildValue 的原型:
PyObject *Py_BuildValue(char *format, ...);
所以第一个参数应该是“O”而不是“O”。
我也不确定你的第二个参数:你正在使用 my_func() 结果而不是获取指向该函数的指针。
推荐阅读
- regex - 使用正则表达式的条件子表达式替换
- virtualbox - VirtualBox:在两个来宾之间共享 VHD 磁盘
- apache-camel - 在 Apache Camel 中使用带有可选值的 setProperty()
- powershell - 使用 PowerShell 计算 csv 列中的条目之间的差异
- python - “GBTClassificationModel”对象没有属性“fitMultiple”-pyspark
- regex - 使用 /bin/ash 从表达式匹配模式中提取子序列
- python - 我想要一些不同的输出
- c - 为什么在 stdbool.h 中使用整数而不是无符号整数?
- java - 每次在 intelliJ 中进行更改时,我们是否需要更新项目(右上角的蓝色按钮)?
- javascript - 在 JavaScript 中使用语法