ctypes; structure mit dynamischen array

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
alban
User
Beiträge: 8
Registriert: Mittwoch 19. April 2006, 23:44

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
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]
Antworten