2013-11-15 49 views
2

我有一個C庫使用ctypes的包裝的函數,看起來像這樣如何將ctypes c_void_p對象轉換爲實際類型?

rrpLib.getParameterValueAsPointer.restype = c_void_p 
def getParameterValueAsPointer(parHandle): 
    return rrpLib.getParameterValueAsPointer(parHandle) 

其中rrpLib是ctypes的CDLL對象。 以及對於某個parHandle,其基礎對象是已知的double *。

我怎麼能投的c_void_p對象,以獲得在Python端的實際雙號?

+0

我是新來的ctypes,一切都不是很清楚。 rrpLib.getParameterValueAsPointer.restype設置爲c_void_p 我猜手動創建是否爲redunant? 我仍然看不到如何從c_void_p轉換爲double。 –

回答

0

想到這一個,感謝eryksun的建議。 正確的方法似乎是做

myVoidVal = getParameterValueAsPointer(aParaHandle) 
mydblPtr = cast(myVoidVal, POINTER(c_double)) 
print myDblPtr[0] 

給出正確的值。

+0

問題是返回類型不總是雙*。事實上它可以是任何類型的。 –

+0

如果有可能,以確定如何投放基於'aParahandle',您可以設置['errcheck'(http://docs.python.org/2/library/ctypes#ctypes._FuncPtr.errcheck)的功能返回解引用的指針值。 – eryksun

相關問題