Python używa ctypów do przekazywania tablicy char * i wypełniania wyników
Próbuję użyć ctypes do utworzenia tablicy char * w pythonie, aby przekazać ją do biblioteki w celu wypełnienia łańcuchami. Oczekuję 4 ciągów z powrotem nie więcej niż 7 znaków długości każdy.
Mój kod pyłu wygląda tak
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]);
}
}
Kiedy próbuję uruchomić ten kod, otrzymuję błędy segmentacji. Stworzyłem test z C, który działa idealnie, ale w Pythonie muszę ustawić niepoprawnie tablicę wskaźników lub coś takiego. Wydaje się, że dociera do drugiego węzła w pętli, a następnie ma problem, jaki widziałem z wypuszczaniem danych do linii poleceń. Każdy wgląd byłby bardzo mile widziany.