Ich muss lernen, wie man das char**
in der untenstehenden C++ Methode durch Python ctypes handhaben kann. Bisher hat es gut geklappt, andere Methoden aufzurufen, die nur einfache Zeiger benötigen, indem ich create_string_buffer()
benutzt habe, aber diese Methode erfordert einen Zeiger auf ein Array von Zeigern.
ladybugConvertToMultipleBGRU32(
LadybugContext context,
const LadybugImage * pImage,
unsigned char** arpDestBuffers,
LadybugImageInfo * pImageInfo )
Wie erstelle ich in ctypes einen Zeiger auf ein Array von sechs create_string_buffer(7963648)
Puffern, um sie an diese C++ Methode zum Schreiben zu übergeben?
arpDestBuffers = Zeiger auf [create_string_buffer(7963648) for i in xrange(6)]
Danke für jede Hilfe.
Beide untenstehenden Antworten funktionieren. Ich habe einfach nicht bemerkt, dass ich ein weiteres Problem in meinem Code hatte, das mich daran gehindert hat, die Ergebnisse sofort zu sehen. Das erste Beispiel ist genau so, wie Luc geschrieben hat:
SixBuffers = c_char_p * 6
arpDestBuffers = SixBuffers(
*[c_char_p(create_string_buffer(7963648).raw) for i in xrange(6)] )
Das zweite Beispiel, das von omu_negru's Antwort stammt, lautet:
arpDestBuffers = (POINTER(c_char) * 6)()
arpDestBuffers[:] = [create_string_buffer(7963648) for i in xrange(6)]
Beide werden von der Funktion akzeptiert und überschrieben. Wenn man print repr(arpDestBuffers[4][:10])
vor und nach dem Aufruf der Funktion eingibt, erhält man:
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
'\x15\x10\x0e\xff\x15\x10\x0e\xff\x14\x0f'
was zeigt, dass die Funktion den Puffer erfolgreich mit Daten überschrieben hat.