配列をフィールドとしてctypes構造を定義するとc_char
、そのフィールドのサイズを取得できませんが、c_ubyte
配列に切り替えると取得できます。私の理解では、次の例では、Pythonはbar2
ポインター(char *)として扱われますが、ではありませんbar1
。誰かがその背後にある論理を説明できれば幸いです。
import ctypes
class Foo(ctypes.Structure):
_fields_ = [ ('bar1', ctypes.c_ubyte*1),
('bar2', ctypes.c_char*1) ]
foo = Foo()
for f,t in foo._fields_:
print t
print ctypes.sizeof(foo.bar1)
print ctypes.sizeof(foo.bar2)
これが出力です:
<class '__main__.c_ubyte_Array_1'>
<class '__main__.c_char_Array_1'>
1
Traceback (most recent call last):
File "test.py", line 12, in <module>
print ctypes.sizeof(foo.bar2)
TypeError: this type has no size