4
Ich versuche, die folgende C++ Methode von meinem Python-Code zu nennen:Wie übergeben Sie Char-Zeiger von Python auf C++ API?
TESS_API TessResultRenderer* TESS_CALL TessTextRendererCreate(const char* outputbase)
{
return new TessTextRenderer(outputbase);
}
ich Schwierigkeiten habe, mit wie den Zeiger auf die Methode zu übergeben:
Ist nach dem richtigen Weg?
textRenderer = self.tesseract.TessTextRendererCreate(ctypes.c_char)
oder sollte ich tun:
outputbase = ctypes.c_char * 512
textRenderer = self.tesseract.TessTextRendererCreate(ctypes.pointer(outputbase))
oben gibt mir Fehler Doing:
TypeError: _type_ must have storage info
in einem String Passing arbeitete für mich! Die Aufrufe von verschiedenen Methoden schlagen jedoch fehl. Ich fragte eine verwandte Frage und fragte mich, ob Sie http://stackoverflow.com/questions/36871072/segmentation-fault-while-calling-cpp-function-from-python – Anthony
Beachten Sie, dass eine Zeichenfolge sollte nur direkt übergeben werden 'const char *'. Wenn es nicht "const" ist, benutze 'ctypes.create_string_buffer ('initial value, oder benutze eine ganze Zahl')'. Python-Strings sind semantisch unveränderbar, und CPython hängt davon ab, um verschiedene Strings in Code-Objekten und Attributnamen zu internieren. Wenn ein internierter String mutiert wird, ist dies nicht nur eine Frage der Datenbeschädigung, sondern auch des Attributzugriffs und der dict-Suche, wenn die Zeichenfolge ein dict-Schlüssel ist. – eryksun