我有以下代码
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)
答案 0 :(得分:2)
来自文档:
cast()函数可用于将ctypes实例强制转换为 指向不同ctypes数据类型的指针。 cast()有两个参数, 一个ctypes对象是或者可以转换为某些指针 kind和ctypes指针类型。它返回第二个实例 参数,它引用与第一个参数相同的内存块。
我想你只想这样做:
print("%d.%d.%d"%(mj.value,mn.value,pt.value))