我正在使用Python ctypes与一些C代码进行交互。
对于我试图调用的特定C函数,我需要将指针传递给结构中的字段。该字段不是第一个字段。看起来像byref()函数会这样做,所以我试图使用;
byref(obj,myObject.data.offset)
因此定义了myObject:
class myObject(Structure):
_fields_ = [
('meta1',c_void_p),
('meta2',c_int),
('meta3',c_int),
('data',c_char * 10)
]
但是,此调用失败,因为它需要运行的系统只运行Python 2.5版,并且在2.6中添加了添加可选偏移参数的功能。
我已尝试byref(obj.data)
,但这会导致错误:TypeError: byref() argument must be a ctypes instance, not '_ctypes.CField'
。
如何在版本中实现所需的结果< 2.6(总是要求2.6是不切实际的,因为这需要在不总是可以升级的系统中工作。)
答案 0 :(得分:1)
在2.5中,ctypes有addressof
,因此您可以使用以下内容:
obj = myObject()
arg = c_char_p(addressof(obj) + myObject.data.offset)