2017-02-22 17 views
0

все,ctypes аннулируется массив указателей на Python

Сейчас я использую модель ctypes в питоне ввести файл .dll. В моем исходном коде есть функция в C++, как следующие

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

где фреймбуфера является указатель, указывающий на массив пиксельных данных гибких типов, например голец, uint16 и т.д. Поскольку я Newbee для питона, я использовал ctypes.create_stream_buffer, а именно

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

Мои вопросы, если обещания об использовании всех элементов в буфере может быть любого типа? Или только первый элемент является гибким, а остальные должны быть char? Если да, то что мне делать, если я хочу передать подходящую переменную.

Большое спасибо

ответ

0

Если у вас есть буфер, и вы хотите конвертировать в различные типы, вы должны использовать struct. Например, если у вас есть:

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

Тогда, если у вас есть строка, которая представляет этот стек в в Python переменной my_data, вы можете распаковать его с вызовом:

import struct 
# ... 
mvars = struct.unpack("iidf",my_data); 

myvars будет кортеж распакованных данных.

Проверьте примеры в link Я дал вам.

Смежные вопросы