Próbuję użyć ctypes, aby utworzyć tablicę char * w pythonie, która zostanie przekazana do biblioteki i wypełniona ciągami. Spodziewam się, że 4 ciągi z powrotem nie będą dłuższe niż 7 znaków.Python za pomocą ctypes przekazuje tablicę char * i zapełnia wyniki
Mój kod py wygląda to
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]);
}
}
Wciąż dostaję naruszenie ochrony pamięci, gdy próbuję uruchomić ten kod . Stworzyłem test z C, który działa doskonale, ale w Pythonie muszę ustawiać tablicę wskaźnika niepoprawnie lub coś podobnego. Wydaje się, że dostaje się do drugiego węzła w pętli, a następnie ma problem, jak widziałem od wypluwania danych do wiersza poleceń. Każdy wgląd byłby bardzo doceniany.
można również tworzyć tablicy 2D dla buforu: 'string_buffers = ((ctypes.c_char * 8) * 4)()'. Powtórzę to samo, gdy zdefiniujesz "wskaźniki" w następnym wierszu. – eryksun