Übergeben von Arrays mit ctypes
Ich habe eine C-Funktion
void read_FIFO_AI0(int16_t** input, size_t size, NiFpga_Session* session, NiFpga_Status* status)
{
*input = (int16_t*) malloc (size*sizeof(int16_t));
// function that populates the array *input
}
, das das Array "* input" auffüllt. Jetzt möchte ich die Daten in diesem Array zur weiteren Verarbeitung an Python übergeben. Ich versuche, ctypes zu verwenden, um das zu tun:
def read_FIFO_AI0(size,session,status):
_libfpga.read_FIFO_AI0.argtypes = [POINTER(ARRAY(c_int16, size)), c_int, POINTER(c_uint32), POINTER(c_int32)]
_libfpga.read_FIFO_AI0.restype = None
values = (c_int16*size)()
_libfpga.read_FIFO_AI0(byref(values),size,byref(session),byref(status))
return values
Der Code wird ausgeführt, aber ich erhalte falsche Ergebnisse im Array. Wenn ich versuche, die C-Funktion in C zu verwenden, erhalte ich die richtigen Ergebnisse:
size_t size=20;
int16_t* input;
read_FIFO_AI0(&input, size, &session, &status);
Was wäre der richtige Weg, um das Array so zu füllen, dass ich in Python auf die Daten zugreifen kann? Ich bin nicht daran gebunden, einen Zeiger auf ein Array zu verwenden, das aufgefüllt wird. Ich kann das Array auch problemlos in der C-Funktion erstellen und als Rückgabe an Python senden, aber ich konnte auch nicht arbeiten.