我正在包装一个使用回调作为外部内存分配器的C库。基本上,它不执行malloc和free本身,而是公开几个用于生成指定大小的缓冲区的回调。将这些与ctypes连接起来相当简单,而且所有这些似乎都在工作。但是,我似乎无法将数组连接到传入的指针。在
C接口如下所示:
extern int (*alloc_int_buffer_callback)(some_struct* buffer, uint32_t length);
我已经通过ctypes定义了这个结构,它看起来非常匹配。在
ctypes回调如下所示:
^{pr2}$我遇到的问题是,试图让指针(一些结构)实例指向类型(c\u int*length)的数组似乎不起作用。这是我现在接到的回电:
def _alloc_struct_buffer(ptr, length):
arr_type = SomeStruct * length
arr = arr_type()
ptr.contents = cast(addressof(arr), POINTER(SomeStruct))
return 1
不幸的是,我得到了一个错误,大概是“Expected SomeStruct而不是LP_usomestruct”。我错过了什么?在
如果要返回参数中的指针,则需要传入指向指针的指针:
如果您只是简单地传入一个指针,那么在函数中更改指针不会产生任何效果,因为您是按值传递指针的。在
在Python回调中,可以使用
^{pr2}$在改变原型之后。在
相关问题 更多 >
编程相关推荐