是否可以使用argtypes
属性将Python int
自动转换为ctypes整数指针?在
例如
import ctypes
cfunc = ctypes.CDLL('somelib.so').somefunc
i = 100
cfunc.argtypes = [ctypes.POINTER(ctypes.c_int)]
cfunc(i)
我希望argtypes
属性可以用来自动转换python整数……但是我得到了一个错误
我假设这是因为argtype实际上由两个ctypes
调用组成?在
显然,这是有效的:
cfunc(ctypes.byref(ctypes.c_int(i)))
但是有点冗长,尤其是有多个辩论!在
没有指针类型的自动转换。在
POINTER(c_int)
是指向C整数的指针,表示存储,通常表示它是输出参数。如果您调用了somefunc(7)
,那么输出值会去哪里?在不是很明显,如果写入了C
int*
,那么您已经创建了一个临时C int存储值。如果cfunc
写入该存储,则在函数返回后立即释放它,并且无法访问该值。因此,您必须创建存储并将其分配给一个变量,以使引用保持足够长的时间来检索值:相关问题 更多 >
编程相关推荐