Ü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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage