Zitat von
ele:
Hallo,
Ich stehe vor der Herausforderung ein robustes, modulares System zu Programmieren und möchte gerne eine Diskussion anregen, welches die beste Lösung sein könnte.
Bemühe mal die Suchfunktion. Dazu gibt es schon eine Reihe Diskussionen.
Ich hatte das gleiche Problem und habe alle Varianten, einschließlich teurer Kauftools wie Remobjects Hydra, ausprobiert.
Jetzt bin ich der Ansicht, das es unter Delphi für ein robustes Pluginsystem, das auch von Dritten erweitert werden kann, nur zwei Möglichkeiten praktikabel sind.
Das ist einmal eine getrennte ExeFile. Hier habe ich mir ein Framework geschrieben, was den Datenaustausch realisiert.
Start des Programmes über Kommandozeile. In dieser werden Steuerparameter und das
Handle des rufenden Programms übergeben.
Das externe Plugin meldet sich dann über wm_copydata an und übergibt/übernimmt die Steuerparameter.
Die zweite Variante ist die Realisierung als
Com-Server.
Einziger Nachteil ist hier die Notwendigkeit einer einmaligen Registrierung bei der Installation.
Wenn man erst einmal mit dem Prinzip klar kommt, es ist einfach aber schlecht dokumentiert, dann ist das die bei weitem eleganteste Lösung.
Alle Plugin ein einheitliches Basisinterface. Den Namen des Plugin in einer Inifile oder ähnlichem eingetragen und das Problem ist gelöst.
Alle anderen Verfahren funktionieren nur mit Klimmzügen, wenn man ohne Laufzeit
BPL arbeitet.
Mit Laufzeit
BPL handelt man sich eine
BPL-Hölle ein, gegen die die
DLL Hölle ein Erholungslager ist.
Com hat noch ein paar andere Vorteile.
So kann das Plugin als Exe angelegt werden. Mit
COM+ können Plugin rechnerübergreifend eingesetzt werden.
Letztendlich bieten solche Plugin praktisch eine Sprachunabhängikeit, wenn man sich an die in Delphi verfügbaren Datentypen für das Interface hält.
Z.B. kann ein Net Programm mit wenigen Klicks in ein
Com-Server verwandelt werden und ist aus Delphi problemlos aufrufbar.
Die Forderung zur Laufzeit laden, entladen erfüllt Window automatisch.
Gruß
Peter