Forum: PC-Programmierung Wie funktionieren Plugin-/Add-on-mechanismen


von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Hallo Leute

Mich beschaeftigt gerade die Frage, wie Plugin- bzw. Add-on-mechanismen 
(wie z.B. bei Eclipse, Firefox, oder Spielen wie WoW, oder auch Malware 
die Module nachladen kann) funktionieren. Ich hab so auf anhieb noch 
nicht mal eine Vorstellung davon, wie man solch einen Mechanismus (also 
die Moeglichkeit des ladens eines Plugins )(Codetechnisch) umsetzen 
koennte. :-/

Habt Ihr da vielleicht Erfahrung (Literatur, Links etc.), um etwas Licht 
ins dunkel zu bringen? :-)

Gruesse

von (prx) A. K. (prx)


Lesenswert?

Technisch können das explizit hinzugeladene DLLs sein, also DLLs, die 
nicht implizit im Programm referenziert werden.

In Windows API gibt es Funktionen, mit denen DLLs geladen werden können 
und mit denen man die davon exportierten Schnittstellen erfährt. Es 
hängt von der Programmierumgebung ab, wie sich das dann im Programm 
darstellt.

In unixoiden Betriebssystemen geht das mit einer "shared library" 
prinzipiell ähnlich.

: Bearbeitet durch User
von J. D. (snowowl)


Lesenswert?

Ich denke Umsetzen lässt sich das relativ einfach.
Bleiben wir mal bei Windows/Linux:
Die Frage ist ob das mit einer eingebauten Installationsroutine (z.B. 
wie bei Eclipse) oder dynamisch durch einfaches Ablegen des Plugins 
(z.B. Gimp Filter) in einem definierten Verzeichnis funktionieren soll.

Eine eingebaute Installationsroutine verteilt den Inhalt des Plugins auf 
die korrekten Verzeichnisse und registriert dann das Plugin in einer 
Tabelle(Textdatei/Registry) die das Programm verwendet um beim Start 
alle Plugins zu laden.
Die andere Version prüft beim Start des Programms in bestimmten 
Verzeichnissen ob ein Plugin vorhanden ist und läd dieses dann (z.B. 
Gimp Filter).
In beiden Fällen ist eine Versions-Checksummenprüfung sinnvoll damit dem 
Programm kein falsches/unpassendes/Malware Plugin untergeschoben werden 
kann.
Die Kommunikation zwischen dem Hauptprogramm und den Plugins erfolgt 
nach dem Laden über vorher definierte Schnittstellen.

Über die Kommunikation:
http://de.wikipedia.org/wiki/Interprozesskommunikation


die Doku für z.B. Firefox:
https://developer.mozilla.org/en-US/docs/Building_an_Extension

von dfgdfg (Gast)


Lesenswert?

Das ist prinzipiell ganz einfach einfach erklärt. Bei Plugins oder 
nachgeladenen Modulen musst du ja irgendeine Art Schnittstelle 
definieren damit du später weist welche Funktionen du aufrufen kannst. 
In c++ definierst du eine abstrakte Klasse in einem Header. Wenn ein 
Entwickler ein Plugin erstellen möchte muss er die darin enthaltenen 
Methoden ableiten und implementieren. Somit kann ein Programmteil 
Plugins laden indem er in einem Verzeichnis jede dll nach diesen 
Methoden testet. Windows kann dann die dll laden und dem Programm einen 
Zeiger darauf geben. Schon kannst du auf alle bekannten Methoden 
zugreifen. Eine malware macht nichts anderes.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Vielen dank fuer die Antworten. Das hilft mir schon mal etwas weiter. :)

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Ich hab jetzt gefunden, wonach ich gesucht habe:
1
Dynamic loading
https://en.wikipedia.org/wiki/Dynamic_loading
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Danke das Ihr mich in die richtige Richtung geschubst habt. :)

Wuensche euch schoene Feiertage.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.