Python ctypes变量内容问题

时间:2011-12-15 15:27:43

标签: python ctypes

我正在使用以下DLL函数

int ReadMemU32(long address , long *pdata)

我正在使用 ctypes byref ,如下所示:

read_data =  c_ulong(0)
result = ReadMemU32(address, byref(read_data))

当我检查它的值时,我注意到这一点:

>>> read_data
c_ulong(55L)
>>> read_data == 55
False
>>> read_data == c_ulong(55L)
False

为什么它是虚假的?

如果我改为:

# my_memory is of type Class(Structure) with c_ulong field names read_data
my_memory.read_data = read_data

并检查结果:

>>> my_memory.read_data 
55L
>>> my_memory.read_data == 55
True

有什么区别?

1 个答案:

答案 0 :(得分:3)

对于您的代码,只需使用:

read_data.value == 55

动机原因:

>>> read_data == c_ulong(55L)
False

发生是因为ctyps没有为C对象实现正确的Python比较 - 它测试对象标识,这是默认值。但是,如果你比较每个对象的“.value”属性,你就可以了。