Konzept für eine libwrapper extension
Verfasst: Montag 13. Dezember 2004, 01:55
Hi,
ich bin noch relativ neu in python und erst recht im schreiben von C extensions, wenn das also irgendwie trivial ist, wäre mir auch schon mit ein paar links bzw. Schlagwörter geholfen Prinzipiell funktioniert die extension auch aber mit einem Teil habe ich Probleme:
Ich moechte einen wrapper fuer eine C lib schreiben die in etwa so aussieht:
Also in gewisser Weise OOP mit C. Für modify gibt es eine Standardimplementierung, um aber die lib richtig nutzen zu können muss man eine Wrapper Funktion schreiben in etwa so:
myModify soll in python geschrieben werden. Ich habe mir das ganze so gedacht, das Modul stellt eine Klasse Class bereit, die eine methode mymodify hat, die einfach modify aus der C lib aufruft. Ein User sollte dann einfach eine von Class abgeleitete Klasse erstellen, mymodify ueberschreiben und an geeigneter Stelle die mymodify methode der baseclass aufrufen.
Umsetzen moechte ich das so:
in __init__ wird das struct initialisiert, als modify wird ein pointer zu einer Hilfsfunktion uebergeben, diese Hilfsfunktion ruft dann die python methode mymodify auf, welche wiederum das echte modify (C lib) aufruft (Hoffe das war verständlich).
Das Problem ist jetzt, wie kann ich von der Hilfsfunktion die python Methode mymodify aufrufen, also wie komme ich an die richtige Klasse ran, denn wenn der User die Klasse abgeleitet hat soll ja die neue mymodify Methode aufgerufen werden (die dann gegebenenfalls die baseclass mymodify Methode aufruft)?
Vielleicht habe ich aber nur einen Denkfehler und man löst sowas ganz anders, wäre um jeden Hinweis/Denkanstoss dankbar
ich bin noch relativ neu in python und erst recht im schreiben von C extensions, wenn das also irgendwie trivial ist, wäre mir auch schon mit ein paar links bzw. Schlagwörter geholfen Prinzipiell funktioniert die extension auch aber mit einem Teil habe ich Probleme:
Ich moechte einen wrapper fuer eine C lib schreiben die in etwa so aussieht:
Code: Alles auswählen
struct Class {
int data;
void (*modify)(Class *, int new);
Code: Alles auswählen
void myModify(Class *c, int new) {
if (new > 3)
modify(c, new);
}
struct Class *c;
c = malloc(sizeof(Class));
c->data = 0;
c->modify = &mymodify;
Umsetzen moechte ich das so:
in __init__ wird das struct initialisiert, als modify wird ein pointer zu einer Hilfsfunktion uebergeben, diese Hilfsfunktion ruft dann die python methode mymodify auf, welche wiederum das echte modify (C lib) aufruft (Hoffe das war verständlich).
Das Problem ist jetzt, wie kann ich von der Hilfsfunktion die python Methode mymodify aufrufen, also wie komme ich an die richtige Klasse ran, denn wenn der User die Klasse abgeleitet hat soll ja die neue mymodify Methode aufgerufen werden (die dann gegebenenfalls die baseclass mymodify Methode aufruft)?
Vielleicht habe ich aber nur einen Denkfehler und man löst sowas ganz anders, wäre um jeden Hinweis/Denkanstoss dankbar