Plugins mit Libs (Variablen nutzung?)

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Displaced
Beiträge: 83
Registriert: So 12. Jul 2009, 10:08

Plugins mit Libs (Variablen nutzung?)

Beitrag von Displaced »

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.
Zuletzt geändert von Displaced am Do 30. Jun 2011, 07:09, insgesamt 1-mal geändert.

carli
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?)

Beitrag von carli »

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.

Socke
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?)

Beitrag von Socke »

carli hat geschrieben:letzteres wäre viel flexibler, während die Bibliotheken vollständig auf Geschwindigkeit fixiert sind.
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.

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
Die Übergänge — also wie viele Funktionen jeweils benötigt werden — kann stark schwanken. Ein Video-Abspiel-Programm kann beispielsweise einen zusätzlichen Codec dadurch benutzen, dass die Bibliothek schon bekannt ist, und daher direkt schon implementiert wird (der Codec ist also nur verfügbar, wenn die Bibliothek auch installiert ist) — oder die Daten werden an den Codec über eine standardisierte Schnittstelle weitergeleitet, der sie selbstständig bearbeitet und zurückgibt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Displaced
Beiträge: 83
Registriert: So 12. Jul 2009, 10:08

Re: Plugins mit Libs (Variabble nutzung?)

Beitrag von Displaced »

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?

Socke
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?)

Beitrag von Socke »

Displaced hat geschrieben:Kann man einer DLL einfach so Prozeduradressen oder sowas übergeben?
Klar. Du rufst einfach eine Funktion auf. Was die dann damit macht, ist dann dieser Funktion überlassen.

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

marcov
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?)

Beitrag von marcov »

carli hat geschrieben:
letzteres wäre viel flexibler, während die Bibliotheken vollständig auf Geschwindigkeit fixiert sind.
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)

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.

Displaced
Beiträge: 83
Registriert: So 12. Jul 2009, 10:08

Re: Plugins mit Libs (Variabble nutzung?)

Beitrag von Displaced »

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.

carli
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?)

Beitrag von carli »

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.

Antworten