我运行了以下代码:
from ctypes import *
class InnerStructure(Structure):
pass
InnerStructure._fields_ = [
('d', c_ulong),
]
class ComplexStructure(Structure):
pass
ComplexStructure._fields_ = [
('a', InnerStructure * 2),
('b', c_ushort * 2 * 2),
('c', c_ulong),
]
input_structure = ComplexStructure()
print(type(input_structure.a))
print(type(input_structure.a[0]))
print(type(input_structure.a[0].d))
print(type(input_structure.b))
print(type(input_structure.b[0]))
print(type(input_structure.b[0][0]))
print(type(input_structure.c))
print(type(c_ushort(1)))
print(type(c_long(1)))
以及我期望的是input_structure.a[0].d
的类型是c_ulong
,但我获得的内容看起来如下:
<class 'struct_utils_tests.InnerStructure_Array_2'>
<class 'struct_utils_tests.InnerStructure'>
<type 'long'>
<class 'struct_utils_tests.c_ushort_Array_2_Array_2'>
<class 'struct_utils_tests.c_ushort_Array_2'>
<type 'int'>
<type 'long'>
<class 'ctypes.c_ushort'>
<class 'ctypes.c_long'>
这是一个严重的问题,因为我无法强制任何结构的成员为c_*
类型,因此我不能获取结构成员的地址(函数地址仅适用于ctypes类型)。这是预期的行为还是应该以不同的方式写出这些结构的定义?
提前致谢!