2010-07-07 46 views
2

我使用Python中的​​調用C函數。它在由庫分配的內存中返回一個指向結構的指針(應用程序調用另一個函數以稍後釋放它)。我無法弄清楚如何按下函數調用以適應ctypes。該結構是這樣的:python 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's excellent customresize() function,因爲我沒有內存(Memory cannot be resized because this object doesn't own it)。

回答

3

修改斯科特的答案刪除resize()呼叫工作:

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

你能解釋一下這是怎麼使用?我嘗試調整大小,但返回了:'(lu_list.contents).guid = customresize((lu_list.contents).guid,(lu_list.contents).cnt)' 'TypeError:不兼容的類型,GUID_Array_4實例而不是GUID_Array_1實例' – Awalias 2012-11-14 10:54:35