2010-07-07 3 views
2

파이썬에서 ctypes을 사용하여 C 함수를 호출하고 있습니다. 라이브러리가 할당 한 메모리에 구조체에 대한 포인터를 반환합니다 (응용 프로그램에서 나중에 다른 함수를 호출하여 나중에 해제합니다). 내가 ctypes에 맞게 함수 호출을 마사지하는 방법을 알아내는 데 어려움을 겪고 있습니다.파이썬 ctypes에서 알 수없는 배열 길이

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

가 어떻게 나를 InterfaceInfo 배열의 n 번째 항목에 액세스 할 수 있도록하는 ctypes를 알 수 있습니다 :

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

나는이처럼 보이는 구조의 서브 클래스를 사용했습니다 : 같은 구조체가 보인다?

메모리가 (Memory cannot be resized because this object doesn't own it) 아니기 때문에 Scott's excellent customresize() function을 사용할 수 없습니다. resize() 호출을 제거하는

답변

3

수정 스콧의 답변 일 :

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_1 대신 인스턴스 GUID_Array_4 인스턴스' – Awalias

관련 문제