2

我有以下代码

 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 的新手,但我找到了像pŕintcast(c_int, POINTER(c_char_p))这样的例子c_intc_int(2)

4

1 回答 1

2

从文档中:

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

我想你只想这样做:

print("%d.%d.%d"%(mj.value,mn.value,pt.value))
于 2013-06-04T03:25:58.530 回答