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的新手,但我发现cast(c_int, POINTER(c_char_p))为pŕint c_int的例子,没有得到c_int(2)

来自文档:

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

我认为你只是想这样做:

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

最新更新