Wie kann man eine Plugin-Schnittstelle in Cpp realisieren?



  • Bei Photoshop funzt das auch ohne dll/so und läuft trotzdem auf allen Systemen 😕 Oder werden bei Photoshop die Plugins interpretiert 😕 ich hab da gerade absolut keinen Plan...



  • Möglicherweise gibt es da so eine Art interne Scriptsprache in der die Plugins geschrieben werden und die das Programm dann interpretiert.



  • Meistens sind das interpretierte Sprachen. Bei Cinema4D ist das z.B. so, das man da auch PlugIns entwickeln kann. Einmal mit der eigenen Sprachen namens Coffee (hihi) und einmal über eine C++ Schnittstelle. Wobei natürlich letztere für Windows und MacOS jeweils neu compiliert werden müssen. Im übrigen, das neu compilieren bleibt einem doch eh nicht erspart, oder?

    Lädiglich bei Coffee schreibt man es einmal und es läuft auf beiden Plattformen.

    Photoshop kenne ich nicht (außer vom Namen, klar), aber da wird es doch sicherlich ähnlich Cinema4D sein.

    Viele Spiele-Engines haben auch Scriptsprachen, die Spiele dazu kann man dann auch als Plugins sehen. Nebula ist eine 3D-Engine, da kann man einmal in C++ programmieren, oder man programmiert die "PlugIns" in der Scriptsprache TCL/TK.

    In allen System wird dann meist die C++-Schnittstelle aus Leistungs- oder Komplexitätsgründen angeboten. Aber mit den Scriptsprachen kann halt jeder mal schnell was basteln, wenn er keinen C++ Compiler hat.

    Wenn es nicht um Performace in deiner Software geht, würde ich eine fertige Scriptsprache nehmen und diese als PlugIn-Sprache benutzen. Im Web findet man viele Scriptsprachen die man in seine Projekte einbinden kann.



  • Wie funktioniert dass denn bei Firefox? Laden die einfach Plugin-DLLs? Das gibt es doch zig Plugins. Das Thema interessiert mich auch sehr.



  • Herrmann schrieb:

    Wie funktioniert dass denn bei Firefox? Laden die einfach Plugin-DLLs? Das gibt es doch zig Plugins. Das Thema interessiert mich auch sehr.

    FF ist doch frei. Warum nicht einfach mal auf mozilla.org stöbern, ein Mini-PlugIn saugen, oder die DOCs lesen?



  • Die ganz kleinen Plug-Ins werden mit ner Art XML-Datei erstellt, z.B. das Google-Quicksearch-Fenster ist so eines.



  • Ok..

    Vielen Dank für die schnellen Antworten.



  • MOM. Man muss unterscheiden ob man neue Funktionen bereitstellen oder nur die vorhandenen Funktionen ausnützen will.
    Mit einer Scriptsprache kann man nur das machen was einem das Programm bereits zu beginn zur verfügung stellt. Man kann da nicht schnell eine komplett neue Funktion erfinden.



  • In diesem konkreten Fall ist es so, dass:
    - Lesen der Datei
    - Datenstrukturen zum Ablegen der Daten
    vom Mutterprogramm gestellt werden können...

    Aber zum Beispiel werden Dialogfenster für Zusatz-Eingaben benötigt, die sich von Dateityp zu Dateityp unterscheiden können.

    Die Plugins sollen also die gelesenen Daten decodieren, aufbereiten und dem Mutterprogramm zur Verfügung stellen. Und bei Bedarf Zusatzinfos vom Nutzer erfragen. Diese Dialoge haben Assistent-Form, mit simplen MessageBoxen ist es nicht getan.



  • Hi

    das laden von software modulen zur laufzeit ist normalerweise aufgabe des OS und somit plattform aghängig. ggf kann man da was triksen, in dem man sich seine eigenen DLL loader schreibt. Nur das könnte etwas schwirig werden, da du binärdaten als ausfürbaren code in den spreicher einbringen musst. was normalerweise nur das os selber machen darf zwegs sicherheit und so.

    ein anderer vorschlag. du definierst ein Lib Loader interface in der hauptaplikation. dieses interface wird dann applikationsspezifisch implementiert. die implementierungen greifen wieder über die entsprechende Platfömabhängigen rotinen auf eine DLL / Lib zu Die wiederum entsprechend der Platform zu implementieren ist. Diese jedoch greift wieder auf ein fest definiertes Interface zu, was denn deine Module implementiert.

    APP <====> LIB LOADER <====> Modul
    der Lib Loader ist platform abhängig implementiert besteht einmal aus einem App teil und einer Lib teil
    das Modul ist wieder platformunabhängig. ( muss aber immer entsprechend übersetzt werden) und wird zum lib teil des libLoaders gelinkt

    dadurch musst du nur einmal den platform abhängigen teil implementieren.

    gruss Termite





  • C++ muss immer kompiliert werden.
    Es ist nicht schwierig.

    Nochmals wie aus meinem ersten Posting.
    Du schreibst dir eine Klasse die BS-Abhängig ist. Dies lädt die DLL zur Laufzeit, übergibt ihr die Daten und übernimmt diese auch wieder.

    Das Plugin selbst schreibst du mit Standard-C++. Das erspart änderungen am Code wenn man zw. dem BS kompilieren muss.

    Diese hat eine Funktion die immer gleich ist. Entweder gibst du dort eine Zeiger auf eine Klasseninstanz zurück oder du verarbeitest in den Klassen der DLL/so das was du möchtest.


Anmelden zum Antworten