###结构体、数组、指针、指向数组的指针
from ctypes import *
class point(Structure):
pass
point._fields_ = [
('x', c_int),
('y', c_int)
]
arry_gen = point * 10
arry = arry_gen(range(10))
arry_ptr_gen = POINTER(point)
arry_ptr = arry_ptr_gen(arry)
###回调函数用法
# /* demo.c --> demo.so */
# include <stdio.h>
# typedef int (*callback)(void);
# int func_arg (callback get_value)
# {
# return get_value();
# }
from ctypes import *
def getvalue():
return 10
def run():
libdemo = cdll.LoadLibrary('./demo.so')
func_arg = libdemo.func_arg
func_arg.restype = c_int
py_func_getvalue = CFUNCTYPE(c_void_p)
func_getvalue = py_func_getvalue(getvalue)
print func_arg(func_getvalue)
run()
###根据内存地址获取数据,不过,尽量少用,这种方法并不很好
memaddr = libc.xxx()
v = c_char_p(memaddr).value