我正在使用以下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


有什么不同?

最佳答案

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

read_data.value == 55


动机为何:

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


发生这种情况是因为ctyps没有为C对象实现正确的Python比较-它测试对象的身份,这是默认设置。但是,如果比较每个对象的“ .value”属性,就可以了。

10-07 21:34