ctypes.cast总是抛出ArgumentError

时间:2013-06-04 03:13:02

标签: python python-3.x ctypes

我有以下代码

 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)

ArgumentError函数cast

中抛出ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

问题是为什么?我的代码中的错误在哪里我是一个带有ctypes的newbiew,但我找到像cast(c_int, POINTER(c_char_p))这样的例子,用于pŕintc_int而没有获得c_int(2)

1 个答案:

答案 0 :(得分:2)

来自文档:

  

cast()函数可用于将ctypes实例强制转换为   指向不同ctypes数据类型的指针。 cast()有两个参数,   一个ctypes对象是或者可以转换为某些指针   kind和ctypes指针类型。它返回第二个实例   参数,它引用与第一个参数相同的内存块。

我想你只想这样做:

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