Sto provando a usare i ctypes per creare un array char * in python da passare a una libreria per il popolamento con stringhe. Mi aspetto 4 stringhe non più lunghe di 7 caratteri ciascuna.Python che usa i ctypes per passare un array char * e popola i risultati
Il mio codice py assomiglia a questo
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]);
}
}
continuo a ricevere errori di segmentazione quando si tenta di eseguire questo codice . Ho creato un test da C che funziona perfettamente ma in Python devo impostare l'array di puntatori in modo errato o qualcosa del genere. Sembra di arrivare al secondo nodo nel ciclo e quindi avere un problema come ho visto sputando i dati nella riga di comando. Qualsiasi intuizione sarebbe molto apprezzata.
È inoltre possibile creare una matrice 2D per il buffer: 'string_buffers = ((ctypes.c_char * 8) * 4)()'. Ripeterà lo stesso quando definirai 'puntatori' nella riga successiva. – eryksun