PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Module unter KDE



Nicolas
05-11-2002, 19:59
Hallo!

Ich habe mir unter KDE ein Programm gebaut, das lateinische Verben konjugieren kann. Nun will ich das aber so erweitern, dass man Verben verschiedemer Sprachen konjugieren kann. Ich habe mir gedacht, dass man dann die verschiedenen Programme als Module hinzuladen kann.
Ich habe im Internet ein Tutorial zu KParts gefunden, aber das ist irgendwie nicht das richtige. Ich hab auch schon in der Hilfe zu den verschiedenen Klassen etwas über KLibFactory und KLibLoader gehört, aber ich blick nicht ganz durch, was ich da jetzt machen muss.

Nicolas

anda_skoa
05-11-2002, 20:50
Das wäre eher ein Fall für Plugins.
KParts::Plugin ist da das Basisinterface.
Oder, wenn man auch diese Eigenschaften (XML GUI Framework für KActions, etc) nicht braucht, kann man eine eigene Pluginbasisklasse benutzen.

Man kann Plugins aber wie Parts laden.

Da muß auf den letzten paar Seiten des Forums ein Thread von TheDodger sein, in dem es um KParts geht.
Das gilt praktisch fast alles auch für Plugins.

Ciao,
_

axeljaeger
06-11-2002, 15:06
Dein Programm hört sich interessant an! Ich muß latein noch ein Jahr lang machen. Gibt es da eine Homepage zu?

Nicolas
06-11-2002, 20:06
Nein, eigentlich nicht, aber ich kann es ja hier hochladen, wenn du willst.

tuxipuxi
06-11-2002, 20:18
hoert sich irgendwie interessant an, ich habe kein latein und wundere mich gerad.
gibt es in latein keine unregelmaessigen verben?

weil mit franzoesisch und englisch muesste man ja die auch noch beruecksichtigen.

oder hast du das auch eingebaut?

edit:
ja bitte, lad es mal hoch, ich moechte gerne versuchen das fuer englisch miteinzubauen, oder franzoesich( aber franz kann ich selbst net so gut :))

Nicolas
06-11-2002, 20:58
Aber der Unterschied zwischen KParts und selbstgebauten Plugins ist, dass in dem Programm, das ein KParts-Plugin lädt, nur eine Funktion aufgerufen werden muss und in einem eigenen Plugin werden mehrere verschiedene Funktionen aufgerufen. Dann brauche ich einmal ein spezielles Modul, das Programm, das das Modul lädt und eine Datei, in der das Modul selber beschrieben ist und die gibt es bei KParts nicht. Und da weiß ich nicht wie das genau funktioniert.

@lane
Nein, die kann es noch nicht.

Nicolas

tuxipuxi
06-11-2002, 21:05
lad doch ma hoch :)

anda_skoa
06-11-2002, 22:40
Original geschrieben von Nicolas
Aber der Unterschied zwischen KParts und selbstgebauten Plugins ist, dass in dem Programm, das ein KParts-Plugin lädt, nur eine Funktion aufgerufen werden muss und in einem eigenen Plugin werden mehrere verschiedene Funktionen aufgerufen. Dann brauche ich einmal ein spezielles Modul, das Programm, das das Modul lädt und eine Datei, in der das Modul selber beschrieben ist und die gibt es bei KParts nicht. Und da weiß ich nicht wie das genau funktioniert.


Das hab ich jetzt nicht verstanden :(

Ein KParts::Part und ein KParts::Plugin unterscheiden sich nur dadurch, dass ein KParts etwas "größeres" ist, das auf jeden Fall ein Widget hat.
Aber KParts::Plugin besitzt immer noch die Möglichkeit, KActions bper XMLG Gui einzuklinken.

Wenn man das auch nicht braucht, benutzt man einfach eine andere, eigene, Pluginbasis.

Ciao,
_

Nicolas
07-11-2002, 14:30
Ich kapiere nur nicht ganz wie das genau funktionieren soll. Angenommen ich bau das Programm so, dass es vom Modul die Funktion konjugiere() aufrufe, aber das Modul hat keine Funktion konjugiere(). Was passiert dann?

Nicolas

SeCa
07-11-2002, 15:21
Kannst auch eine dynamische bibliothek (*.so) machen und diese dann dynamisch laden mit ldopen. Ist allerdings ziemlich kompliziert.

tkortkamp
07-11-2002, 16:08
Ich kapiere nur nicht ganz wie das genau funktionieren soll. Angenommen ich bau das Programm so, dass es vom Modul die Funktion konjugiere() aufrufe, aber das Modul hat keine Funktion konjugiere(). Was passiert dann?
Dein Programm wurde sich wahrscheinlich mit einen SEGV verabschieden.
Der Funktionspointer den du von dlsym() bekommst wird dann aber NULL sein; das mußt du natürlich vorher überprüfen.

c ya,
Tobias

anda_skoa
07-11-2002, 16:32
Original geschrieben von Nicolas
Ich kapiere nur nicht ganz wie das genau funktionieren soll. Angenommen ich bau das Programm so, dass es vom Modul die Funktion konjugiere() aufrufe, aber das Modul hat keine Funktion konjugiere(). Was passiert dann?


Das Modul hat diese Funktion einfach :)

Das läuft ungefähr so.

Der KLibLoader lädt die Pluginlibrary.
In jeder KDE Pluginlib gibt es eine C Funktion, die init_libname heißt.
Diese erzeugt eine KLibFactory Subklasse.

Diese Klasse kann nur entweder mit der Standard create Methode oder, wenn du eine eigene Factoryklasse hast und castest, eine Instanz des Plugins erzeugen.
Man kann auch mehrere Plugins in einer Library haben, wenn man mit einem Parameter der Factory sagen kann, welches Plugin sie erzeugen soll.

Dieses Plugin castest du dann auf deine PluginBasis Klasse, bzw. dies kann bereist der Rückgabetyp einer eigene Factorymethode sein.

Durch den Cast ist dann auch sicher gestellt, dass im Plugin alle Methoden der PluginBasisklasse vorhanden sind.

Ciao,
_

Nicolas
10-11-2002, 09:50
Danke für deine Antworten. Jetzt kapier ich endlich wie das funktioniert.

@lane
Wenn das Programm fertig ist, werde ich es mal uploaden.

Nicolas