Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Pluginmanager: : Klassenproblem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.07.2004, 12:32 Uhr
XCoder



Also zunächst einmal die Idee:


Ich habe mir überlegt, zukünftig all meine Anwendungen auf Pluginbasis zu erstellen, um flexibler auf Probleme reagieren zu können. Es sind dabei Plugins vorgesehen, die für die gängsten Programmiermuster lösungen erstellen können (Fenstererstellung, Renderer, Netzwerkplugin, Soundausgabe, usw.).

Weiterhin soll der Anwender nur eine Schnittstelle kennen, mehr nicht. In dem Fall habe ich die Klasse XComBase genannt, die einige rein virtuelle Methoden definiert, die dann alle Plugins überschreiben sollen. Das dient z.B. der Kommunikation zwischen den Plugins, die über das command design pattern realisiert werden soll. Weiterhin hat die Klasse noch Methoden wie GetPluginInstance () oder GetPluginTyp (), die auch von den Plugins überschrieben werden müssen und mit dessen Hilfe die Plugins gemanaged werden können. Von dieser XComBase Klasse ist jetzt jeweils für jede Pluginart wieder eine Klasse abgeleitet, die wiederum rein virtuelle Methoden definiert, die allerding nur von den Plugins überschrieben werden, die von dieser Klasse abgeleitet werden (und somit zu dieser Pluginart gehört).

Die Anwendung macht jetzt folgendes: Sie erzeugt einen XComBase pointer und eine Managerinstanz. Dann wird die Methode registerPlugin () vom Manager aufgerufen, die dann einen Flag erwartet, welcher bestimmt welches Plugin erstellt werden soll, sowie den gerade erzeugten Pointer. Der Manager ruft in der Dll die methode auf, die den pointer initalisiert und die Anwendung kann ab sofort damit arbeiten.


Allerdings kennt die Anwendung die Klasse nicht und arbeitet mit einem XComBase*, welcher nicht die aufzurufenden Methoden kennt (da sie in XComBase nicht definiert sind sondern z.B. in XComGuiBase). Ein Cast kommt da auch nicht in Frage, weil da fakto für einen Cast die Zielklasse bekannt sein muss. Was mache ich denn da?


Gruß Sebastian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.07.2004, 12:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


bei den MFC-Klassen gibt es glaube ich immer sowas wie "GetClassName" vll kannst du sowas bei dir auch implementieren.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.07.2004, 13:03 Uhr
Pablo
Supertux
(Operator)


Dann hat es wenig mit ANSI C/C++ zu tun -->
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.07.2004, 13:04 Uhr
XCoder



hmmm also ne weitere dll geht nicht. Ich will das alles Plattformübergreifend hinbekommen, dass heisst die dll's/so dateien müssen unabhängig voneinander geladen werden können. Hat jemand noch eine andere idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.07.2004, 13:08 Uhr
XCoder



hmmm.... Mit MFC hat mein Problem aber mal gar nix zu tun....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.07.2004, 13:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nein so meinte ich es nicht, ich meinte damit das du evtl in den Plugins eine Art "GetClassName"-Funktion implementierst und darauf irgendwie im Manager reagierst
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.07.2004, 10:44 Uhr
stephanw
localhorst


Also ist Dein Problem, dass in einer Unterklasse Methoden deklariert werden, die in der abstrakten Basisklasse nicht zur Schnittstelle gehoeren, die Du aber doch gern aufrufen wuerdest ?! Das geht nur mit einem Cast und auch eine
Ausertung des Klassennamens oder Id oder sonstwas macht ja letztlich das Gleiche. Entweder Du lebst damit und machst das so, oder Du versuchst, Dein Design zu aendern.
Da die Unterklassen offenbar eine groessere/andere Schnittstelle haben, sind sie ganz offensichtlich eben nicht vom gleichen Typ (Interface). Daher solltest Du vielleicht nicht alles auf Teufel komm raus von EINEM Interface erben, sondern vielelicht mehrere Grundtypen einfuehren, die eine wirklich passendes Interface anbieten und meinetwegen auch von einem viel kleineren Interface fuer Plugins erben (falls alle Plugin-Typen tatsaechlich etwas gemeinsam haben).
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: