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

标签 python ctypes

所以我正在尝试读取一个无符号短数组,该数组由我正在使用的 c 库中的 void 指针返回。 header中的函数定义是这样的:

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' object has no attribute '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 指针访问”

谁能给我任何帮助?

最佳答案

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

我不知道该函数为什么会这样,但您看到的输出非常清楚地表明您的函数返回 null。

关于Python ctypes 如何从空指针返回读取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938599/

相关文章:

c - 在 Linux 上链接 python 共享库时出现问题

Python ctypes 组合两个 c_double 数组

python - 重新分配 Pandas df 中的列值

python - 从父文件夹导入模块

python - 如何在 C 函数中访问 python 变量的数据? (参数类型 : void *)

python - 使用ctypes导入dll函数

python - 使用 python ctypes 引用不透明类型

python - 如何在列表理解中不向列表中添加任何内容?

python - 如何构建trie树来解决这个解析算法

python - Pycharm更长的输出