Plugin System

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Plugin System

Beitrag von Hoto »

Bin gerade am planen eines etwas größeren Projekts und würde dort gerne in der finalen Version sowohl auf Input als auch Output Plugins setzen. Aktuell frage ich mich nun, ob man eine solche Unterstützung von Anfang an mit einplanen und einbauen sollte oder ob man dies auch später umsetzen kann ohne auf all zu große Probleme dabei zu stoßen?

Bisher hab ich auf dem Gebiet absolut null Ahnung, weiß daher auch nicht auf was ich bei sowas achten muss, daher diese vielleicht auch durchaus mögliche blöde Frage.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Hi, Hoto!

Das kommt ganz darauf an, was es werden soll, und wie du die Umsetzung planst.

Ein Pluginsystem zu relisieren bedarf immer ein bisschen Weitblick- spätestens dann, wenn du merkst, dass dein bisheriges System nicht mehr ausreicht, musst du teilweise das gesamte Pluginsystem inklusive DLLs neuschreiben.

Aber eine Idee ist es, die Grundfunktionalitäten des Programmes, intern auch wie Plugins zu behandeln. Also so, dass du quasi eine Schnittstelle baust, und über diese Schnittstelle deine (Grund-)Funktionen ansprichst, obwohl die Grundfunktionen in der gleichem EXE kompiliert sind. Natürlich ist diese Methode nur zu empfehlen, sofern das ncht unbedingt zu Lasten der Geschwindigkeit geht.

Das hat folgende Vorteile:
Wenn du von Anfang an auf Strikte Trennung deiner Funktionen achtest, so kannst du später unter Umständen leichter expandieren.

Sofern du das Pluginsystem wirklich einbaust, musst du nicht mehr viel hinzubauen, um Plug-Ins laufen zu lassen (sprich: Nur noch das Laden der DLL Datei davorschrauben).

Strikte Trennung von Hostprogramm (Fenster, Anzeige, Menüs etc) und Funktionalitäten.

---

Nachteile wären:
Man kann "Nicht eben schnell" einen Bug heraushacken, indem man quick-and-dirty eine Funktion hinzubaut (Plugin-B hat beispielsweise keinen Zugriff auf die Variablen von Plugin-A).

Man ist auf die eigene Weitsicht des Systems angewiesen. Wenn man im späteren Verlauf der Programmierung bemerkt, dass das bisherige PluginSystem nicht ausreicht, so muss man unter Umständen eine Menge umschreiben.

Das ist natürlich alles eine Menge Theorie und wenig Code, aber mehr kannst du auch bei den bisher gegebenen Informationen von dir noch nicht erwarten ;)

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Nein, nein, das ist schon ok so, mir ging es auch erstmal nur um die Theorie und weniger um Code. Bevor ich die Theorie nicht richtig begriffen hab bringt ja Code nichts. ;)

Sowas in der Art hab ich mir aber schon gedacht. Da muss ich mir mal überlegen was fest im Programm und was man per Plugins hinzufügen können soll. Ich werds aber wohl doch erst später einbauen, weil bei dem Programm Umfang kann ich jetzt schon schlecht einschätzen, wie das Plugin System aufgebaut sein muss und am Ende wären dann die Plugins ständig inkompatibel, das wäre ja auch nicht der Sinn der Sache.

Gibts eigentlich auf dem Gebiet irgendwelche möglichst deutschen Theorie Tuts im Netz?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Du solltest nur die GUI und das PluginSystem selbst fest programmieren,
den Rest bauste gleich so auf, wie ein Plugin, so merkste sofort was in die
Schnittstelle implementiert werden muß, macht zwar anfangs mehr Arbeit,
aber später spart es eine Menge Arbeit.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Little John

Beitrag von Little John »

ts-soft hat geschrieben:Du solltest nur die GUI und das PluginSystem selbst fest programmieren,
den Rest bauste gleich so auf, wie ein Plugin
Das halte ich in Bezug auf ein ernsthaftes, größeres Projekt für einen sehr klugen Ratschlag, wenn ich das mal so sagen darf. ;-)
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

@ts-soft: also im Grunde sozusagen nur eine Art Einstellungsseite für die Plugins und alle anderen Funktionen direkt in Plugins? Ich mein mehr geht ja eigentlich nicht mehr auszulagern.

Noch fehlt mir aber etwas der Durchblick wie ich das dann umsetzen muss, vor allem, dass dann auch für andere Programmierer brauchbar ist, die dann selbst ein Plugin machen wollen. Da sollte man sich ja dann an einen gewissen Standard halten oder benutzt da jedes Programm, das Plugins nutzen, seinen eigenen Pseudo Standard?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hoto hat geschrieben:oder benutzt da jedes Programm, das Plugins nutzen, seinen eigenen Pseudo Standard?
So sieht es aus. Eine bzw. mehrere sehr gute Plugin-Schnittstellen hat z.B.
mein geliebter TotalCommander. Mußte einfach mal die SDKs von
Programmen mit PluginSchnittstelle laden und schnüffeln :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Little John

Beitrag von Little John »

Hoto hat geschrieben:Noch fehlt mir aber etwas der Durchblick wie ich das dann umsetzen muss, vor allem, dass dann auch für andere Programmierer brauchbar ist, die dann selbst ein Plugin machen wollen. Da sollte man sich ja dann an einen gewissen Standard halten oder benutzt da jedes Programm, das Plugins nutzen, seinen eigenen Pseudo Standard?
Du kannst das entscheiden wie Du willst, und alles so festlegen wie es eben für die Zwecke Deines Programms sinnvoll ist. Das ist dann die Spezifikation ("(Pseudo-) Standard" passt hier nicht) der Plugin-Schnittstelle(n) Deines Programms.
Wichtig für die Plugin-Programmierer ist eine sorgfältige Dokumentation der Schnittstellen.

Gruß, Little John
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Und Idio*ensicher muss das sein... Hatte mich auch mal an sowas versucht.
Die Fehlerabfangprogrammierung nahm die meiste Zeit in Anspruch ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten