模拟python ctypes byref参数2前2.6

时间:2013-12-23 22:45:34

标签: python compatibility ctypes

我正在使用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是不切实际的,因为这需要在不总是可以升级的系统中工作。)

1 个答案:

答案 0 :(得分:1)

在2.5中,ctypes有addressof,因此您可以使用以下内容:

obj = myObject()
arg = c_char_p(addressof(obj) + myObject.data.offset)