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

はい、これは正常です。 sizeheaderはゼロに初期化されるためvirt_handle、Python のポインターの NULL に相当する None に初期化されることは当然のことです。 構造要素が 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 に答える