Python ctypes如何从void指针返回读取数组

时间:2013-04-10 23:59:20

标签: python ctypes

所以我试图读取一个无符号短数组,该数组由我正在使用的c库中的void指针返回。标题中的函数定义如下:

void* Foo(int a, int b)

此函数最终返回一个指向unsigned short类型数组的指针。

在python中,我一直试图使用ctypes返回数组但没有成功。这就是我所拥有的:

import ctypes
import numpy as np

libc = ctypes.cdll.LoadLibrary("Library.dll")

Vec=np.zeros((1000,),dtype=np.uint16)

c_ushort_p = ctypes.POINTER(ctypes.c_ushort)
Vec_p=confVec.ctypes.data_as(c_ushort_p)

libc.Foo.restype = ctypes.c_void_p
Vec_p=libc.Foo(1,1)

print Vec_p

返回“无”。

如果我尝试:

...
libc.Foo.restype = ctypes.c_void_p
Vec_p=libc.Foo(1,1)

print Vec_p[0]

我得到TypeError:'NoneType'对象没有属性' getitem '。

我也试过这个:

...
libc.Foo.restype = ctypes.c_void_p
Vec_p=ctypes.cast(libc.Foo(1,1),c_ushort_p)

print Vec_p

返回,其中print Vec_p [0]给出“ValueError:NULL指针访问”

任何人都可以给我任何帮助吗?

1 个答案:

答案 0 :(得分:3)

DLL返回空指针。这些在ctypes中表示为None。

我不知道为什么函数会以这种方式运行,但是你看到的输出很清楚你的函数返回null。