我有以下代码
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的新手,但我发现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))