一个简单的类在32位Windows 7上产生这种奇怪的行为。我试图将这个结构的数组传递给我的dll然后尝试获取由dll填充的数据包的内容。当我创建这个类的对象时,我发现c_void_p是一个NoneType对象。这是正常行为吗?
import ctypes
class io_packet( ctypes.Structure ):
_fields_ = [( 'size', ctypes.c_uint32 ),
( 'header', ctypes.c_uint32 ),
( 'string1_size', ctypes.c_uint32 ),
( 'string2_size', ctypes.c_uint32 ),
( 'string1', ctypes.c_char * 128 ),
( 'string2', ctypes.c_char * 64 ),
( 'virt_handle', ctypes.c_void_p ), ]
a = io_packet()
a.size
a.header
a.string1_size
a.string2_size
a.string1
a.string2
a.virt_handle
答案 0 :(得分:0)
是的,这很正常。 size
和header
被初始化为零,因此virt_handle
初始化为None并不奇怪,这相当于Python中指针的NULL。从Python读取结构元素时,ctypes
返回Python 值。
另一个例子:
>>> a=c_void_p()
>>> a
c_void_p(None)
>>> a.value
>>> type(a.value)
<type 'NoneType'>
>>> a=c_void_p(1)
>>> a
c_void_p(1)
>>> a.value
1
>>> type(a.value)
<type 'int'>