使用CFFI在Python中创建CData类型的缓冲区

z

我正在尝试在Python中创建具有特殊类型的缓冲区,以将其发送给包装有CFFI的C函数。

在C语言中,我有类似以下内容:

typedef unsigned char UINT8;
typedef UINT8* PUINT8;

然后,在Python中,以上行在中ffi.cdef(),我的缓冲区实例化代码如下所示:

nb_buffer = 8
buffer_size = 42

buffers = ffi.new( "PUINT8[]", nb_buffer )

for i in range( nb_buffer ):
    tmp_buffer = ffi.buffer( ffi.new( "UINT8[]", 1 ), buffer_size )
    buffers[ i ] = ffi.cast( "PUINT8", ffi.from_buffer( tmp_buffer ) )

c.function( buffers )

C函数接收一个UINT8 **。

而且...在C函数中,最后以分段错误结束。

所以我用print buffers[ i ]ffi.cast

<cdata 'unsigned char *' 0x2cbaca0>
<cdata 'unsigned char *' 0x2cbacd8>
<cdata 'unsigned char *' 0x2cbaca0>
<cdata 'unsigned char *' 0x2cbacd8>
<cdata 'unsigned char *' 0x2cbaca0>
<cdata 'unsigned char *' 0x2cbacd8>
<cdata 'unsigned char *' 0x2cbaca0>
<cdata 'unsigned char *' 0x2cbacd8>

我想念什么?缓冲区一被覆盖就被垃圾回收tmp_buffer吗?

阿明·里戈(Armin Rigo)

怎么样:

buffers = ffi.new( "PUINT8[]", nb_buffer )
keepalive = []

for i in range( nb_buffer ):
    p = ffi.new("UINT8[]", buffer_size)
    keepalive.append(p)
    buffers[i] = p

c.function( buffers )

# keepalive stays alive at least until here

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用文件类型的缓冲区中的文件类型

来自分类Dev

在Emacs 24.3下使用缓冲区名称中的空格创建新缓冲区

来自分类Dev

ArcGIS使用Android中的GeometryServer创建缓冲区

来自分类Dev

Netty中MessageToByteEncoder的缓冲区类型

来自分类Dev

在Numpy数组中创建缓冲区

来自分类Dev

在openCL中创建子缓冲区

来自分类Dev

在openCL中创建子缓冲区

来自分类Dev

在CFFI中创建类型为“ REAL(*顶点)[DIM]”的cdata

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

类型错误:Python 中的预期字符串或缓冲区

来自分类Dev

mio中的缓冲区类型有问题

来自分类Dev

Cython中访问类型为memoryview的数据缓冲区

来自分类Dev

mio中的缓冲区类型有问题

来自分类Dev

为C中的缓冲区(结构类型)分配内存

来自分类Dev

mio中的缓冲区类型有问题

来自分类Dev

在基于多个列的数据框中创建缓冲区-Python

来自分类Dev

使用缓冲区在raster :: extract中创建带有属性信息的数据框

来自分类Dev

在OpenGL中创建不可变缓冲区

来自分类Dev

WebGL。是否在GPU中创建缓冲区?

来自分类Dev

在Swift中从vDSP DSPSplitComplex创建Metal缓冲区

来自分类Dev

在C中为未知(大小)结构创建缓冲区

来自分类Dev

在C ++中创建缓冲区/数据包

来自分类Dev

在Swift中从vDSP DSPSplitComplex创建Metal缓冲区

来自分类Dev

在 R 中创建缓冲区和计数点

来自分类Dev

使用缓冲区创建实例后需要MemoryStream吗?

来自分类Dev

何时使用数组,缓冲区或直接缓冲区

来自分类Dev

需要:使用预分配的缓冲区存储结果在Python中执行FFT实现

来自分类Dev

使用 pybind11 从 C++ 反序列化 Python 中的 protobuf 缓冲区

Related 相关文章

热门标签

归档