Seite 1 von 1

ctypes; structure mit dynamischen array

Verfasst: Freitag 14. September 2007, 16:18
von alban
Hallo,

ich habe eine C Struktur die ein dynamisches array enthält. Sie sieht so aus:

Code: Alles auswählen

typedef struct {

    int N;
    int *array;

} frame_t;
Jetzt würde ich die gerne so mit ctypes umsetzen, dass ein array der größe N erzeugt wird wenn in Python Daten zugeordnet werden. Ist das möglich?

Ich habe folgendes probiert:

Code: Alles auswählen

class Frame(Structure):
  _fields_ = [("N", c_int), ("array", int * N)]
Leider geht das nicht und das array kann nicht dynamisch mit N erzeugt werden.

Kann ich denn mit meiner Frame Klasse selbst die __init__ Funktion nutzen und das array dynamisch verändern?


Danke für die Hilfe,

Alban

Verfasst: Freitag 14. September 2007, 18:23
von BlackJack
Das ist natürlich möglich, aber nicht so. Dein `Frame` dürfte so gar nicht funktionieren, weil beim zweiten Feld gar kein gültiger Typ steht. ``int * N`` gibt einen `TypeError`. Du musst beim `Frame` einfach nur die C-Deklaration 1:1 umsetzen. Das zweite Feld ist vom Typ "pointer to int":

Code: Alles auswählen

from ctypes import c_int, POINTER, Structure

class Frame(Structure):
    _fields_ = (('N', c_int),
                ('array', POINTER(c_int)))


def main():
    n = 10
    array = (c_int * n)()
    array[5] = 42
    frame = Frame(n, array)
    print frame.N
    print frame.array[1]
    print frame.array[5]