2013-06-04 65 views
2

我有以下代碼ctypes.cast總是拋出引發ArgumentError

from ctypes import cast, c_char_p, c_int, byref, POINTER 

# ... 
mj, mn, pt = c_int(), c_int(), c_int() 
// FreeType 
__dll__.FT_Library_Version(__handler__, byref(mj), byref(mn), byref(pt)) 

print("{0}.{1}.{2}".format(cast(mj, POINTER(c_char_p).value, cast(mn, POINTER(c_char_p).value, cast(pt, POINTER(c_char_p)).value) 

扔一個ArgumentErrorcast功能ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

的問題是,爲什麼?這裏是我的代碼中的錯誤我是用ctypes的一個newbiew但我覺得像cast(c_int, POINTER(c_char_p))打印c_int例子沒有得到c_int(2)

+0

投的第一個參數應該是一個對象,而不是一個類型。 –

+0

抱歉是在寫問題時出錯。我會修復 – rkmax

回答

2

從文檔:

演員()函數可用於將ctypes實例投射到指向不同ctypes數據類型的指針 。 cast()需要兩個參數, 一個ctypes對象,它可以被轉換爲某種 類型的指針,以及一個ctypes指針類型。它返回第二個參數 的實例,它引用與第一個參數相同的內存塊。

我覺得你只是想這樣做:

print("%d.%d.%d"%(mj.value,mn.value,pt.value)) 
+0

好吧如何將c_int轉換爲int python或字符串 – rkmax

相關問題