【发布时间】:2011-03-07 20:19:07
【问题描述】:
我正在包装一个使用回调作为外部内存分配器的 C 库。基本上,它不是自己做 malloc 和 free ,而是公开几个回调来制作指定大小的缓冲区。将它们与 ctypes 连接起来相当容易,而且所有这些似乎都在工作。但是,我似乎无法将数组连接到传入的指针。
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)
我遇到的问题是试图让 POINTER(some_struct) 实例指向一个类型为 (c_int * length) 的数组似乎不起作用。这是我现在收到的回调:
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。哪个是对的? -
哎呀,我打错了。谢谢你的收获。