我正在写一个C++库Python包装,而我得到一个试图建立一个结构的领域。如果我有这样一个结构,当真正奇怪:为什么在C中设置此成员失败?
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代码工作正常,返回struct成员的值。调用SetBit方法给出的地址为foo的对象的错误访问存储器地址栏,它不能被“写入”。
我对代码进行了探索,就像我可以从C和Python中看到所有我想要的值,但是当我试图设置它的时候,它就在我的脸上。我在这里错过了什么?
这是一款Core2 Duo笔记本电脑。我认为,Python布尔应该是内部的整数。 编辑:叶神。就是这样。我切换到一个int,并突然它不爆炸。我勒个去*。 – 2010-03-31 20:30:19
@Lee:Python bools可能是整数,但C++不是:-)(例如,它们是Visual C++的字节) – 2010-03-31 20:35:40
让我感到尴尬。 – 2010-03-31 20:43:31