是否有一种方法可以获取指向ctypes数组中间的元素的指针? 示例:
lib = ctypes.cdll.LoadLibrary('./lib.so')
arr = (ctypes.c_int32 * 100)()
lib.foo(arr)
现在,我不想使用指向foo
的第一个元素的指针来调用arr
,而是在第十个指针。那相当于C表示法&arr[9]
:
lib.foo(&arr[9])
有一个聪明的方法吗?
答案 0 :(得分:3)
byref
有一个可选参数,用于向地址添加字节偏移。
test.dll(Windows)
__declspec(dllexport) int foo(int* arr)
{
return *arr;
}
示例:
>>> from ctypes import *
>>> lib = CDLL('test')
>>> arr = (c_int * 100)(*range(100))
>>> arr[9]
9
>>> lib.foo(arr)
0
>>> lib.foo(byref(arr,sizeof(c_int) * 9))
9