Python ctypes中未知数组长度

4 投票
1 回答
2868 浏览
提问于 2025-04-16 00:55

我正在用 ctypes 从 Python 调用一个 C 语言的函数。这个函数返回一个指向结构体的指针,这个结构体的内存是由库分配的(应用程序稍后会调用另一个函数来释放它)。我在调整函数调用以适应 ctypes 时遇到了困难。这个结构体看起来是这样的:

struct WLAN_INTERFACE_INFO_LIST {
  DWORD               dwNumberOfItems;
[...]
  WLAN_INTERFACE_INFO InterfaceInfo[];
}

我使用了一个结构体的子类,长得像这样:

class WLAN_INTERFACE_INFO_LIST(Structure):
    _fields_ = [
        ("NumberOfItems", DWORD),
        [...]
        ("InterfaceInfo", WLAN_INTERFACE_INFO * 1)
        ]

我该如何让 ctypes 让我访问 InterfaceInfo 数组中的第 n 项呢?

我不能使用 Scott 的优秀 customresize() 函数,因为我不拥有这块内存(Memory cannot be resized because this object doesn't own it)。

1 个回答

4

把Scott的回答改了一下,去掉了resize()这个调用,结果就成功了:

def customresize(array, new_size):
    return (array._type_*new_size).from_address(addressof(array))

撰写回答