wxWidget Applikation mit Pluginschnittstelle
-
Hallo zusammen,
wir sind grade dabei eine Applikation zu planen. Unsere Idee war ein Grundgerüst zur Verfügung zu stellen und den rest per Plugins der Applikation hinzuzufügen.
Leider ist uns noch nicht so ganz klar wie sich dies realisieren lässt.
Hat hierfür jemand einen kleinen Tipp oder ne kurze Beschreibung zur vorgehensweise wie man sowas am besten angeht?
-
Beschäftige mich gerade mit ähnlichen Themen, allerding eher Theoretisch (Praxis kommt später),
Generell ist ein Plug in nichts anderes als eine dll die eine spezielle Spezifikation für diese Schnittstelle erfüllt.
Ihr müsst also eine Basisklasse für die Plugins entwerfen, welche die relevanten Schnittstellen zur Verfügung stellt.
Welche das sind hängt dann wiederum von euren geplanten Plugins abEine einfache Schnittstelle könnte z.B. dann so aussehen:
class PluginBase { wxString pluginname; public: PluginBase(wxString name):pluginname(name){} virtual void loadPluginData()=0; virtual void savePluginData()=0; virtual void initialisePlugin()=0; virtual ~PluginBase(); wxString Getpluginname()const{return pluginname;} }
phlox
-
Das habe ich mir schon so halb gedacht. Die Frage für mich ist nur, wie bekommen man Dialoge, Fenster, Menüs oder Toolbar erweiterungen aus der DLL?
Nee idee wäre ja einfach dem Plugin den wxFrame zu übergeben. Hier hat man ja alle benötigten Elemente. Anderster ging es auch wenn wenn man im Plugin passende Funktionen deklariert die einem einfach nur die benötigten Werte zurück geben.
Die Hauptfrage ist aber für mich nun, wie ich das ganze in den Eventprozess von wxWidget einbinde, dass die Funktionen auch aufgerufen werden?
So wie ich das bis jetzte sehe ist es möglich einmal mit dem Dynamischen anbinden über Connect oder mittels der PushEventHandler Funktion hinzuzufügen. Sehe ich das richtig oder lieg ich da total daneben?
-
Ich denke da du ja wxWidgets sowieso dynamisch dafür Linken musst, ist es auch kein problem für die Plugins entsprechende Klassen von wxDialog etc. zu erstellen.
template<class dialog> class DlgPlugin : PluginBase { dialog* dlg; public: DlgPlugin(wxString name):PluginBase(name),dlg(NULL){} virtual wxDialog* GetDlg(wxWindow* parent, int id) { if(dlg == NULL) dlg = new dialog(parent,id); return dlg; }; }
phlox
-
Du meinst dann quasi Templatevorlagen die den Dialog oder eine View, etc zurückgeben. Ok, ich glaube ich weiß auf was du hinauswillst.
Jetzt bleibt eigentlich nur die Frage wie ich das ganze am besten aus den DLL Dateien noch lade?! Vermutlich mit der Klasse http://www.wxwidgets.org/manuals/stable/wx_wxdynamiclibrary.html#wxdynamiclibrary
-
Ja, ich denke das du mal im wxForum suchen solltest, da gabs schon ein paar Threads dazu.
-
phlox81 schrieb:
Ja, ich denke das du mal im wxForum suchen solltest, da gabs schon ein paar Threads dazu.
OK, ich danke dir!
Denke ich werde in Zukunft mal wieder öfter hier sein...
-
Hab gerade im wxForum einen recht interessanten Thread gefunden:
http://wxforum.shadonet.com/viewtopic.php?t=8803&postdays=0&postorder=ascMit einem Beispiel für Plugins:
http://www.upcase.de/stuff/wxPlugin.zip
-
phlox81 schrieb:
Hab gerade im wxForum einen recht interessanten Thread gefunden:
http://wxforum.shadonet.com/viewtopic.php?t=8803&postdays=0&postorder=ascMit einem Beispiel für Plugins:
http://www.upcase.de/stuff/wxPlugin.zip@phlox81
Der Vorgang war mir mitlehrweile klar, aber der von dir gepostete Link bringt nochmal einiges, da man sich das ganze auch mal dort betrachten kann wie dies realisierbar ist. Danke dir für den Link!
-
Hier nochmals ein Link, in dem ein Artikel vorhanden ist der das Thema Plugins mit wxWidget wiedergibt.
http://gaos.org/gaosjournal/OS-4-2004.pdf