python ctpyes 指针的指针

2018-06-29  本文已影响0人  iosjoker

这玩意太难排版,凑合吧

c 的调用方式如下

void test(char**p, int* len);

char* p = malloc(0x1000)

int len = 0x1000

test(&p, &len)

DebugPrint("size is %d ", len)

DumpHex(p, len)

python 呼叫test

func = CDLL('path').test

functype = CFUNCTYPE(c_void, c_void_p, c_void_p)

func = functype(CDLL('path').test)

data = create_string_buffer(0x1000)

len = c_uint64(0x1000)

func(byref(c_int64(addressof(data))), byref(len))  # 如果32位机器的话data 的地址转化为c_int32

data = data[:len.value] # 将字节码重新组装。 data 本身存储的是c_array_0x1000 . 不是python 的bytes类型。

ctypes pyobjc 这种库自身做了一个桥接。 很多虽然python能访问的类型,并不是python原生的类型。

需要很细心的转化为原生类型后,就大胆的使用吧。

上一篇下一篇

猜你喜欢

热点阅读