AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Minimalistisches PlugIn-System

Ein Thema von DeddyH · begonnen am 24. Aug 2011 · letzter Beitrag vom 25. Aug 2011
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#1

Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:15
Ich trage mich mit dem Gedanken, ein kleines dynamisch erweiterbares Programm zu schreiben. Dazu habe ich mir bislang Folgendes überlegt:
- PlugIns liegen in Form von DLLs vor, welche eigentlich komplette Mini-Anwendungen sind
- diese liegen in einem fest definierten Verzeichnis
- beim Programmstart durchsucht die Hauptanwendung dieses Verzeichnis nach DLLs
- jede gefundene wird daraufhin überprüft, ob sie klar festgelegte Routinen exportiert
- falls dem so ist, wird sie einer Liste hinzugefügt und per Menü o.ä. zur Verfügung gestellt

Meine Frage dazu: ist das so machbar oder denke ich zu simpel? Welche Gefahren könnten u.U. lauern?
Dank im Voraus für Tipps und Anregungen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#2

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:19
Das Prinzip funktioniert so ohne weiteres.
Allerdings klingt das zwar Simpel, aber der Teufel steckt im Detail (konkret: das Design Deiner 'klar festgelegten Routinen' bzw. die Kommunikation zwischen dem Plugin und dem Hauptprogramm). Das ganze ist also durchaus Aufwändiger als man anfangs denkt.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:22
Naja, mir ist schon klar, dass ich diese festgelegten Routinen nach Möglichkeit so definieren muss, dass später keine mehr dazukommen müssen. Aber bislang ist das Ganze ja eh nur ein Gedankenspiel, ich werde schon merken, wo ich mir wieder selbst ein Bein stelle

Danke für Deine Antwort
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:29
Klingt ganz vernünftig.

Wenn dein Programm einfach alle DLLs in einem Verzeichnis versucht zu laden, muss man, um ein Plugin zu deaktivieren, das Plugin aus dem Verzeichnis herauskopieren oder umbenennen. Das ist je nach dem etwas umständlich, aber durchaus kein Blocker.

Bei Plugin-Systemen besteht ganz allgemein die Gefahr, dass die Plugin-Schnittstellen nicht genügend durchdacht werden. Das im Nachhinein zu ändern kann u.U. sehr mühsam sein (neu kompilieren aller Dlls), vorallem dann, wenn Dritthersteller anfangen Plugins beizusteuern.

Aus diesem Grund fände ich es wichtig ein System zu haben, dass dir die Version des Plugins (bzw. der Pluginschnittstelle) mitteilt. Dann kannst du notfalls eine Fehlermeldung ausgeben, falls eine Version von einem Plugin dagerkommt, dass dein Programm nicht unterstützt. Ich benutze in diesem Zusammenhang übrigens die Möglichkeit in der Versions-Information des Programmes (oder in diesem Fall DLL) einen neuen Schlüssel zu erstellen (z.B. PluginVersion).
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:35
Sehr guter Einwand. Ich glaube zwar kaum, jemals in den Genuss zu kommen, dass sich ein Dritthersteller für meine Progrämmchen interessiert, trotzdem sollte man so etwas gleich am Anfang mit bedenken.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:37
Der "Dritthersteller" kann manchmal auch ein Alter Ego aus der Vergangenheit sein...
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:46
DLL basierte Plugin Systeme haben immer das Problem, dass man sehr schlecht komplexe Daten (Objekte) austauschen kann. Forms und Frames aus DLLs sind auch immer anfällig für Ärger. Dafür braucht man dann wieder BPLs, gegen die dein Programm und die Plugins gelinkt sind. Auch stellt sich die Frage, wieviel Wissen steckt in den Plugins? Stichwort Menü: hängen die Plugins sich selber da rein, weil sie das Menü übergeben bekommen (nicht gut) oder geben sie bloß eine Liste der Aktionen und die Anwendung hängt sie an. Wie stellt die Anwendung fest, wo sie hinkommen?

DSharp hat übrigens auch einige Units, mit denen man mit wenigen Handgriffen ein Plugin System bauen kann (angelehnt an MEF)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (24. Aug 2011 um 17:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#8

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 17:49
Ich hab vor langer langer Zeit mal einen Codelib beitrag für ein kleines Plugin System geschrieben, vielleicht bringt dich das auf Ideen:
http://www.delphipraxis.net/73567-fl...ginsystem.html
Die Diskussion dazu ist auch recht interessant:
http://www.delphipraxis.net/74448-fl...iskussion.html
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 18:16
Das Problem mit en PlugIn-Systemen ist, dass es meist Insellösungen sind. Um das vom Zeitaufwand in den Griff zu bekommen habe ich dies auch mit eigenständigen Anwendugen gemacht, die nur mit einem versteckten Aufrufparameter starteten. Der Datenaustausch läuft über xml-Files. Es war angedacht es über einen zentraln SOAP-Server zu steuern, aber dazu ist es nie gekommen. Also kurzum, ist ein gangbare Weg aber nicht der Weisheit letzter Schluß.

Grüße
Martin Schaefer
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#10

AW: Minimalistisches PlugIn-System

  Alt 24. Aug 2011, 19:01
Hi,

Ich habe mal Folgendes gemacht (alles so wie dein Vorschlag, also Verzeichnis durchsuchen, DLL laden usw.):
Jede DLL exportiert neben den Prozeduren "GetName" und "Initialize" (dazu später) beliebige Prozeduren.
Das Einzige, was diese beliebigen Prozeduren gemein haben, ist die Schnittstelle, denn sie sehen alle so aus:

Procedure SomeDLLProcedure (inParam : OleParam, var result, outParam : OleParam);

Ein- und Ausgabeparameter können also Arrays, Streams oder was auch immer sein. Result ist entweder unassigned oder enthält einen Fehler (gestreamed).

Aufgerufen wurden die über einen Plugin-Manager. Nehmen wir an, wir haben eine DLL "MyDLL" und die hat die Prozeduren "Proc1" und "Proc2". Dann rufe ich eine Prozedur der DLL so auf:
ThePluginManager.Call ('MyDLL.Proc1', inParam, result, outParam);

Ich habe damit also eine allgemeine Schnittstelle, die ich beliebig erweitern kann.
Der Plugin-Manager ist auch für die Kommunikation zwischen den DLL verantwortlich, denn er übergibt der DLL per exportierter 'Initialize' Prozedur eine Callback-Schnittstelle, sodaß auch ein Plugin über die gleiche -eben beschriebene Schnittstelle- ein anderes Plugin aufrufen kann. Oder definierte Routinen der Hauptanwendung..

Bei mir gab es in dem Sinne keine Hauptanwendung, denn die DLL implementierten einen Webservice, wobei die einzelnen 'Anwendungen' eben diese DLLs waren.

Desweiteren habe ich dafür gesorgt, das die DLL zur Laufzeit ausgetauscht werden können, ohne die Anwendung (den Service) beenden zu müssen. Die neue oder auszutauschende DLL kann man per TCP direkt in den Service impfen. Der packt die DLL in das Plugin-Verzeichnis, entfernt die alte Version und ab einem definierten Zeitpunkt werden alle Aufrufe an die neue DLL geleitet.

War ziemlich cool und hat auch gar nicht mal so viel Code.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz