2016-09-23 65 views
0

這不起作用:蟒蛇ctypes的陣列將不會返回正確

def CopyExportVars(self, n_export): 
    export_array = (ctypes.c_double * n_export)() 
    self.dll_handle.vs_copy_export_vars(ctypes.cast(export_array, ctypes.POINTER(ctypes.c_double))) 
    return export_array().contents 

我得到這個錯誤(n_export 3):

TypeError: 'c_double_Array_3' object is not callable 
+0

'回報export_array.contents'? –

+0

@ŁukaszRogalski沒有parens,它抱怨沒有'內容'的屬性。 – Jiminion

+0

Geez,對不起,'export_array'是值,而不是指針。因爲它是一個'ctypes'數組,所以你可以索引它來取消值,'export_array [0]'全部到'export_array [n_export-1]' –

回答

1

錯誤是相當自我explainatory。 export_array不是可調用的對象,但您嘗試在函數的最後一行中調用它。此外,您嘗試使用與指針相關的接口('.contents')從數組中檢索值,而不是指向它的指針。

,使工作將​​結果數組轉換爲純Python對象,並返回其最簡單的方法:

def CopyExportVars(self, n_export): 
    export_array = (ctypes.c_double * n_export)() 
    self.dll_handle.vs_copy_export_vars(ctypes.cast(export_array, ctypes.POINTER(ctypes.c_double))) 
    return list(export_array)