Plugins mit Libs (Variablen nutzung?)
Plugins mit Libs (Variablen nutzung?)
Hi Leute,
Ich habe mir ein paar Gedanken zu einem kleineren Plugin-System gemacht, um ein Programm mit Libs zu erweitern ohne das Programm selbst anzurühren.
Nur kann ich ja extern nicht auf Funktionen im Programm zugreifen. Wie mache ich das also am besten, hat da einer eine Idee?
PS:
Meine Idee wäre es, wichtige Variablen an die Lib via Pointer zu übergeben und dort nur noch mit Pointer zu arbeiten, aber ich könnte schwören, dass es dabei Probleme geben wird.
Ich habe mir ein paar Gedanken zu einem kleineren Plugin-System gemacht, um ein Programm mit Libs zu erweitern ohne das Programm selbst anzurühren.
Nur kann ich ja extern nicht auf Funktionen im Programm zugreifen. Wie mache ich das also am besten, hat da einer eine Idee?
PS:
Meine Idee wäre es, wichtige Variablen an die Lib via Pointer zu übergeben und dort nur noch mit Pointer zu arbeiten, aber ich könnte schwören, dass es dabei Probleme geben wird.
Zuletzt geändert von Displaced am Do 30. Jun 2011, 07:09, insgesamt 1-mal geändert.
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Plugins mit Libs (Variabble nutzung?)
Wichtig ist bei einer Plugin-Architektur vor allem ein Interface, das du festlegst.
Ein Interface besteht dann also aus gewissen Objekten, die man hin- und herschubsen kann, sowie Methoden(=Prozeduren), die man auf ein Objekt bezogen aufrufen kann.
Beispiel: Ein Plugin soll einen viereckigen Bereich z.B. im Browser steuern und kontrollieren sollen. Also bekommt das Interface Methoden, sich selbst zu zeichnen und um Benutzereingaben entgegenzunehmen.
Umsetzungstechnisch hast du 2 Methoden, die ich bevorzugen würde:
- Bibliotheken in Pascal (Schlüsselwort Library, unit dynlibs)
- Eine Scriptsprache, mit der man die Funktionalität des Programms erweitern kann
letzteres wäre viel flexibler, während die Bibliotheken vollständig auf Geschwindigkeit fixiert sind.
Ein Interface besteht dann also aus gewissen Objekten, die man hin- und herschubsen kann, sowie Methoden(=Prozeduren), die man auf ein Objekt bezogen aufrufen kann.
Beispiel: Ein Plugin soll einen viereckigen Bereich z.B. im Browser steuern und kontrollieren sollen. Also bekommt das Interface Methoden, sich selbst zu zeichnen und um Benutzereingaben entgegenzunehmen.
Umsetzungstechnisch hast du 2 Methoden, die ich bevorzugen würde:
- Bibliotheken in Pascal (Schlüsselwort Library, unit dynlibs)
- Eine Scriptsprache, mit der man die Funktionalität des Programms erweitern kann
letzteres wäre viel flexibler, während die Bibliotheken vollständig auf Geschwindigkeit fixiert sind.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Plugins mit Libs (Variabble nutzung?)
Skriptsprachen sind nur in der Entwicklung flexibler; bei fertigen Plugins ist dieser Umstand praktisch irrelevant. Geschwindigkeitsvorteile gibts in der Regel nur was den Programmablauf angeht; das reine Berechnen der Daten dürfte kaum Unterschiede offenbaren.carli hat geschrieben:letzteres wäre viel flexibler, während die Bibliotheken vollständig auf Geschwindigkeit fixiert sind.
In beiden Fällen musst du zwei Schnittstellen definieren:
- Eine Schnittstelle, die dein Programm bereitstellt und mit dem die Plugins arbeiten können (z.B. Menüpunkte oder Ereignis-Handler registrieren, Datenzugriff)
- Eine Schnittstelle, die alle Plugins erfüllen müssen, damit diese geladen werden können
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Plugins mit Libs (Variabble nutzung?)
Naja es geht um eine Serveranwendung und ich will halt, dass man erweiterungen schreiben kann.
Also dass man sozusagen das Protokoll erweitern kann und somit neue Pakete einfügen kann.
Kann man einer DLL einfach so Prozeduradressen oder sowas übergeben?
Also dass man sozusagen das Protokoll erweitern kann und somit neue Pakete einfügen kann.
Kann man einer DLL einfach so Prozeduradressen oder sowas übergeben?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Plugins mit Libs (Variabble nutzung?)
Klar. Du rufst einfach eine Funktion auf. Was die dann damit macht, ist dann dieser Funktion überlassen.Displaced hat geschrieben:Kann man einer DLL einfach so Prozeduradressen oder sowas übergeben?
Damit dabei möglichst keine Fehler auftreten, müssen alle verwendeten Typen natürlich in Programm und Bibliothek die selben und daher bekannt sein.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Plugins mit Libs (Variabble nutzung?)
Sie sind auch fixiert auf so viel kontrollieren wie möglich bevor ablauf. (Kompiler kontrolliert eine menge, ich bemerke das das oft wichtiger ist als Geschwindigkiet)carli hat geschrieben:
letzteres wäre viel flexibler, während die Bibliotheken vollständig auf Geschwindigkeit fixiert sind.
Zum Topic: Ich würde erneut überlegen ob man wirklich plugins benoetigt. Das ist eine menge Ärger und Arbeit die nur in extrem populären Applikationen wirklich genutzt werden.
Re: Plugins mit Libs (Variabble nutzung?)
Ich finde schon, dass es sich lohnt. Ich hab sogar mehrere Gründe für.
1) Will ich lernen wie man sowas Sinnvoll umsetzt.
2) Will ich anderen ermöglichen die Software zu erweitern, ohne dass sie im bestehenden Code rumfummeln. Ich bin zwar pro-opensource, aber halt dann doch nicht überall.
3) Will ich selbst ja bereits Plugins bereit stellen. Damit würde ich bestimmte Dinge auf Sinnvolle weise trennen und den Hauptschwerpunkt kleiner Halten und extra Funktionen in diesen Plugins entwickeln.
Keine Ahnung ob das für jeden logisch einsehbare Gründe sind, aber für mich sind sie es.
1) Will ich lernen wie man sowas Sinnvoll umsetzt.
2) Will ich anderen ermöglichen die Software zu erweitern, ohne dass sie im bestehenden Code rumfummeln. Ich bin zwar pro-opensource, aber halt dann doch nicht überall.
3) Will ich selbst ja bereits Plugins bereit stellen. Damit würde ich bestimmte Dinge auf Sinnvolle weise trennen und den Hauptschwerpunkt kleiner Halten und extra Funktionen in diesen Plugins entwickeln.
Keine Ahnung ob das für jeden logisch einsehbare Gründe sind, aber für mich sind sie es.
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Plugins mit Libs (Variablen nutzung?)
Die einzigen zwei Gründe, es nicht zu tun wäre, dass deine Plugins zu tief in das Programm eingreifen müssten und du somit kein Interface (oder ein zu kompliziertes) aufstellen müsstest, oder dass dir ein Chef im Nacken steckt, der dir eine Deadline gesetzt hat.