C函数传递一个指针和一个长度,Python回调需要生成一个数组并分配i

2024-06-17 04:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在包装一个使用回调作为外部内存分配器的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”。我错过了什么?在


Tags: 内存buffertype数组ctypes结构lengthstruct
1条回答
网友
1楼 · 发布于 2024-06-17 04:13:30

如果要返回参数中的指针,则需要传入指向指针的指针:

extern int alloc_int_buffer_callback(some_struct **buffer, uint32_t length);

如果您只是简单地传入一个指针,那么在函数中更改指针不会产生任何效果,因为您是按值传递指针的。在

在Python回调中,可以使用

^{pr2}$

在改变原型之后。在

相关问题 更多 >