我正在为 C++ 库编写一个 Python 包装器,当尝试在 C 中设置结构体的字段时,我感到非常奇怪。如果我有一个像这样的结构体: p>
struct Thing
{
PyOBJECT_HEAD
unsigned int val;
};
并且有两个这样的函数:
static PyObject* Thing_GetBit(Thing* self, PyObject* args)
{
unsigned int mask;
if(!PyArg_ParseTuple(args, "I", &mask))
Py_RETURN_FALSE;
if((self->val & mask) != 0)
Py_RETURN_TRUE;
Py_RETURN_FALSE;
}
static PyObject* Thing_SetBit(Thing* self, PyObject* args)
{
unsigned int mask;
bool on;
if(!PyArg_ParseTuple(args, "Ii", &mask, &on))
Py_RETURN_FALSE;
if(on)
self->val |= mask;
else
self->val &= ~mask;
Py_RETURN_TRUE;
}
调用第一个方法的Python代码工作得很好,返回结构成员的值。调用 SetBit 方法会出现错误,地址 foo 处的对象访问地址 bar 处的内存,无法“写入”。
我已经研究了代码,就好像我可以从 C 和 Python 中查看我想要的所有值,但是当我尝试设置它时,它就在我面前爆炸了。我在这里错过了一些基本的东西吗?
最佳答案
传递 bool PyArg_ParseTuple 的地址是否可能给您带来麻烦? “i”格式将写入一个 int 大小的东西。
您在什么类型的机器上运行?
关于python - 为什么在C中设置该成员失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556172/