Plugin-Interface bereitstellen



  • Hi,

    mir ist grad die doofe Idee gekommen, mein Programm erweiterbar zu machen. Man kennt das ja von Browsern o.ä., ich denke aber auch an sowas wie ein Baukastenprinzip.
    Aber wie stellt man eigentlich eine Plugin-Schnittstelle nach außen bereit? Ich hab da zwar einige Ideen, wüsste aber nicht, wie ich es praktisch umsetze. Eine Schnittstellen-Klasse in einer Header-datei würde ein Plugin ja auch nicht kompilierbar machen...



  • So allgemeingültig kann man das nicht sagen. Es gibt etliche Möglichkeiten, eine bestehende Bibliothek zu erweitern oder in anderen Code einzugliedern.

    Hast du ein konkretes Beispiel?



  • Hangeln wir uns an Firefox entlang. Ich schreibe einen Browser (tu ich natürlich nich, mir ist ja nicht langweilig) und möchte Plugins zulassen, um einen Jugendschutz und eine Werbesperre zu implementieren.



  • Du bietest eben in deinem Framework entsprechende Schnittstellen (konventionellerweise sind das freie Funktionen und öffentliche Memberfunktionen) an. Oder du lässt den Benutzer von Klassen erben. Oder er übergibt Template-Policies. Oder du stellst Callback-Mechanismen zur Verfügung. Oder...

    Tut mir leid, dass ich nicht spezifischer antworten kann, aber deine Frage ist immer noch zu allgemein. Du musst uns schon mehr über dein Design und deine Vorstellung, wie so eine Interaktion in C++ aussehen könnte, verraten.



  • Grundsätzlich läuft das so, dass du eine dynamische Bibliothek (.dll) erstellst, welche dann von dem Programm dynamisch geladen wird (siehe für Win32 LoadLibrary) und dann vordefinierte Funktionen aufruft.
    Ich bin mir nicht ganz sicher, wie Firefox das macht, aber nach dem Prinzip geht das normalerweise.

    Ich vermute mal, dass es dir um so etwas ging und nicht wirklich um das direkte Design der Schnittstelle.



  • Ok, machen wir's etwas konkreter: ich habe eine Anwendung, die Artikel aus einer Datenbank zum Verkauf anbietet. Jetzt soll per Plugin eine Möglichkeit nachgerüstet werden, die Artikelbeschreibungen zu ändern. Außerdem soll es ein Plugin geben, mit dem PDF-Datenblätter erstellt werden können.



  • drakon schrieb:

    Ich bin mir nicht ganz sicher, wie Firefox das macht, aber nach dem Prinzip geht das normalerweise.

    Firefox geht garantiert nicht über .dlls, da die Erweiterungen auf vielen (allen) Plattformen funktionieren (müssen). Das läuft bei Firefox über Scripting (AFAIK JavaScript). Aber das wurde bisher ja auch noch nicht erwähnt.
    Für Scripting-Erweiterungen sehr beliebt:
    😉 Python
    😉 Ruby
    😉 EcmaScript (aka JavaScript)
    😉 LUA

    Kannst dir auch mal SWIG anschauen, um deine eigenen Klassen für verschiedene Scriptsprachen verfügbar zu machen.



  • l'abra d'or schrieb:

    drakon schrieb:

    Ich bin mir nicht ganz sicher, wie Firefox das macht, aber nach dem Prinzip geht das normalerweise.

    Firefox geht garantiert nicht über .dlls, da die Erweiterungen auf vielen (allen) Plattformen funktionieren (müssen). Das läuft bei Firefox über Scripting (AFAIK JavaScript).

    Habe ich vermutet, als ich mal eben kurz nachgeschaut habe habe ich eben nur das Scripting gefunden. Dachte allerdings irgendwie immer, dass es ebenfalls ein Plugin System mit Dll's gibt.

    Scripting ist natürlich ebenfalls eine Alternative.



  • drakon schrieb:

    Dachte allerdings irgendwie immer, dass es ebenfalls ein Plugin System mit Dll's gibt.

    Interessant, schaut so aus
    https://developer.mozilla.org/en/building_an_extension#XPCOM_Components



  • Es gibt zwei Erweiterungsschnittstellen beim Firefox: Add-Ons sind in JavaScript und XUL programmiert (AdBlock, NoScript, Greasemonkey). Plugins sind DLLs mit C-Schnittstelle (QuickTime, Acrobat Reader, Flashplayer).



  • Hehe. Dann hat mich da meine Intuition doch nicht ganz in Stich gelassen. 😉

    Danke für den Link. Habs auf die schnelle wirklich nicht gefunden.


Anmelden zum Antworten