Ich versuche Ctypes zu verwenden, um ein char * -Array in Python an eine Bibliothek zum Auffüllen mit Strings übergeben zu übergeben. Ich erwarte 4 Strings zurück mit nicht mehr als jeweils 7 Zeichen Länge.Python mit ctypes übergeben ein Char * -Array und füllen Ergebnisse
Mein py Code sieht wie folgt aus
testlib.py
from ctypes import *
primesmile = CDLL("/primesmile/lib.so")
getAllNodeNames = primesmile.getAllNodeNames
getAllNodeNames.argtypes = [POINTER(c_char_p)]
results = (c_char_p * 4)(addressof(create_string_buffer(7)))
err = getAllNodeNames(results)
lib.cpp
void getAllNodeNames(char **array){
DSL_idArray nodes; //this object returns const char * when iterated over
network.GetAllNodeIds(nodes);
for(int i = 0; i < (nodes.NumItems()); i++){
strcpy(array[i],nodes[i]);
}
}
Ich halte Segmentierung Fehler bekommen, wenn ich versuche, diesen Code auszuführen . Ich habe einen Test von C erstellt, der perfekt funktioniert, aber in Python muss ich das Zeiger-Array falsch oder etwas einrichten. Es scheint, zum zweiten Knoten in der Schleife zu kommen und dann ein Problem zu haben, wie ich vom Ausspucken von Daten in die Befehlszeile gesehen habe. Jede Einsicht würde sehr geschätzt werden.
Sie können auch einen 2D-Array für den Puffer erstellen: 'string_buffers = ((ctypes.c_char * 8) * 4)()'. Es wird dasselbe durchlaufen, wenn Sie in der nächsten Zeile "Zeiger" definieren. – eryksun