1

一个简单的类在 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
4

1 回答 1

0

是的,这很正常。 size并且header被初始化为零,因此virt_handle初始化为 None 也就不足为奇了,这相当于 Python 中指针的 N​​ULL。 从 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'>
于 2012-07-01T05:21:09.603 回答