Мне нужно научиться обрабатывать char**
в методе C ++ ниже через Python ctypes.
Я прекрасно выполнял вызов других методов, которым нужны только одиночные указатели, используя create_string_buffer()
, но этот метод требует указателя на массив указателей.
ladybugConvertToMultipleBGRU32(
LadybugContext context,
const LadybugImage * pImage,
unsigned char** arpDestBuffers,
LadybugImageInfo * pImageInfo )
Как создать указатель на массив из шести create_string_buffer(7963648)
буферов в ctypes для передачи этому методу C ++ для записи?
arpDestBuffers = pointer to [create_string_buffer(7963648) for i in xrange(6)]
Спасибо за любую помощь.
Оба ответа, приведенные ниже, работают. Я просто не осознавал, что у меня есть другая проблема в моем коде, которая помешала мне сразу увидеть результаты.
Первый пример так же, как Люк написал:
SixBuffers = c_char_p * 6
arpDestBuffers = SixBuffers(
*[c_char_p(create_string_buffer(7963648).raw) for i in xrange(6)] )
Второй пример из ответа omu_negru:
arpDestBuffers = (POINTER(c_char) * 6)()
arpDestBuffers[:] = [create_string_buffer(7963648) for i in xrange(6)]
Обе функции принимаются и перезаписываются. Ввод print repr(arpDestBuffers[4][:10])
до и после вызова функции дает:
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
'\x15\x10\x0e\xff\x15\x10\x0e\xff\x14\x0f'
, который показывает, что функция успешно перезаписала буфер данными.