我正在封裝一個使用回調作爲外部內存分配器的C庫。基本上,它不是做malloc並釋放它本身,而是暴露幾個回調來製作指定大小的緩衝區。用ctypes連接起來相當容易,而且所有這些似乎都在起作用。不過,我似乎無法將陣列連接到在傳遞的指針C函數傳遞一個指針和一個長度,並且一個Python回調需要創建一個數組並分配它
C接口看起來是這樣的:
extern int (*alloc_int_buffer_callback)(some_struct* buffer, uint32_t length);
我有過的ctypes定義的結構,它似乎完美匹配。
的ctypes的回調是這個樣子:
_int_functype = CFUNCTYPE(c_int, POINTER(some_struct), c_uint)
我遇到的問題是,試圖讓指針(some_struct)實例的類型的數組(c_int的*長)點沒有按」 t似乎工作。這裏的回調我有現在:
def _alloc_struct_buffer(ptr, length):
arr_type = SomeStruct * length
arr = arr_type()
ptr.contents = cast(addressof(arr), POINTER(SomeStruct))
return 1
不幸的是,我沿着「預期SomeStruct代替LP_SomeStruct」的線得到一個錯誤。我錯過了什麼?
您的C原型的返回類型爲int *,而您的ctypes原型的返回類型爲int。哪一個是對的? – 2011-03-07 20:22:36
哎呦,我打錯了。謝謝你的收穫。 – 2011-03-07 20:25:45