2016-09-23 2 views
0

を返しません。Pythonの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は括弧を付けずに、 'contents'という属性がないことを訴えています。 – Jiminion

+0

これは申し訳ありませんが、 '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) 
関連する問題