Skip to main content
 首页 » 编程设计

python之模拟 python ctypes byref 参数 2 pre 2.6

2025年05月04日11kuangbin

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

请您参考如下方法:

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

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