curses - Probleme beim Bauen eines CDK-Wrappers
Verfasst: Dienstag 23. Januar 2007, 22:56
Da es sowas noch nicht gibt (bzw es nicht funktioniert), bin ich dabei einen Wrapper für das CDK (eine Curses-Widget-Lib) zu bauen...
Ich möchte gerne, dass ich in C eine Funktion init_CDK habe, die folgendermaßen aussehen soll:
Dann könnte ich unter Python folgendes machen:
Dies führt leider zu einem Segfault (in noecho(), welches von initCDKScreen() aufgerufen wird) - ich muss die C-Funktion so schreiben, dass sie selber das initscr() ausführt:
Damit kann ich in Python leider keine curses.* Funktionen mehr nutzen, da mir immer gesagt wird, dass curses nicht initialisiert ist. (Es sei denn, ich rufe curses.initscr() so nochmal auf, was man laut curses-manpage aber nicht darf)
Aber die eigentliche Frage: Warum führt das erste zu einem Segfault? - Ich habe mir den _cursesmodule.c-Quellcode schon mehrfach angeschaut und bin zu dem Schluss gekommen, dass curses.initscr() auch nur initscr() aufruft und den erhaltenen Zeiger denn in ein PyCursesWindowObject packt.
Vielleicht hat ja jmd ne Idee
(oder wahlweise einen funktionierenden CDK-Wrapper
)
(Anm: Bevor jmd den allgemeinen Aufbau der C-Teile bemängelt - ich schreib das in Pyrex und habe nur schnell die Funktionen "übertragen".)
Ich möchte gerne, dass ich in C eine Funktion init_CDK habe, die folgendermaßen aussehen soll:
Code: Alles auswählen
PyObject * init_CDK (PyCursesWindowObject* wo, /*mehr argumente */)
{
WINDOW * win = wo->win;
CDKScreen * screen = initCDKScreen(win);
/*mehr*/
}
Code: Alles auswählen
screen = curses.initscr()
init_CDK(screen)
Code: Alles auswählen
PyObject * init_CDK (/*mehr argumente */)
{
WINDOW * win = initscr();
CDKScreen * screen = initCDKScreen(win);
/*mehr*/
}
Aber die eigentliche Frage: Warum führt das erste zu einem Segfault? - Ich habe mir den _cursesmodule.c-Quellcode schon mehrfach angeschaut und bin zu dem Schluss gekommen, dass curses.initscr() auch nur initscr() aufruft und den erhaltenen Zeiger denn in ein PyCursesWindowObject packt.
Vielleicht hat ja jmd ne Idee


(Anm: Bevor jmd den allgemeinen Aufbau der C-Teile bemängelt - ich schreib das in Pyrex und habe nur schnell die Funktionen "übertragen".)