Python中的ctypes void指针数组

2024-04-19 18:32:49 发布

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

所有人

现在我使用python中ctypes的模型来引入一个.dll文件。在我的源代码中,我用c++编写了一个函数,如下所示

bool getFrameFromStream(char* streamName, const void* framebuffer, int frame_number, int overwriteMaxPixelVal=-1)

其中framebuffer是指向灵活类型的像素数据数组的指针,例如char、Uint16等ctypes.create_stream_缓冲区,即

framebuffer = ctypes.create_string_buffer(1000000)
ctypes.cast(framebuffer, ctypes.c_void_p)

我的问题是,这个用法是否保证缓冲区中的所有元素都可以是任何类型的?或者只是第一个元素是灵活的,而其他元素仍然应该是char?如果是这样,如果我想转移一个合适的变量,我应该怎么做。在

非常感谢


Tags: 文件函数模型元素类型源代码createctypes
1条回答
网友
1楼 · 发布于 2024-04-19 18:32:49

如果您有一个缓冲区并且想转换成不同的类型,您应该使用^{}。例如,如果您有:

struct FrameBuffer {
    int a;
    int b;
    double d;
    float g;
}

然后,如果在Python中的变量my_data中有表示该堆栈的字符串,则可以使用以下调用将其解包:

^{pr2}$

myvars将是从那里解包的数据的元组。在

检查一下我给你的link中的例子。在

相关问题 更多 >