這玩意太難排版效斑,湊合吧
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] # 將字節(jié)碼重新組裝。 data 本身存儲的是c_array_0x1000 . 不是python 的bytes類型选泻。
ctypes pyobjc 這種庫自身做了一個橋接喜命。 很多雖然python能訪問的類型陌凳,并不是python原生的類型撕彤。
需要很細心的轉化為原生類型后渔欢,就大膽的使用吧。