Plugin programmieren

Hallo. liebe Experten,

ich schreibe gerade ein Programm in C mit Visual Express, das einen Kern mit den wichtigsten Funktionen bieten soll und möchte dafür die Möglichkeit vorsehen, weitere nur in speziellen Anwendungsfällen gebrauchte Funktionen mittels Plugins zu integrieren.

Im Internet fand ich nur Hinweise zur Plugin-Programmierung für existierende Programme wie Eclipse oder Firefox. Soviel habe ich bis jetzt verstanden, daß ich in das Basisprogramm eine Art Schnittstelle einbauen muß, über die es sich mit dem Plugin verbindet.

Kann mir jemand dazu mehr sagen, wie das im einzelnen funktioniert, wie ich vorgehen muß, oder wo ich dazu eine Anleitung finde?

Grüße,

I.

Hallo,

Kann mir jemand dazu mehr sagen, wie das im einzelnen
funktioniert, wie ich vorgehen muß, oder wo ich dazu eine
Anleitung finde?

Viele Wege fuehren nach Rom…

Mal ein C++ Ansatz:

  1. Definiere eine Klasse mit nur pure virtual Methoden (Interface)

    struct Interface
    {
    virtual count() = 0;
    virtual size() = 0;
    }

  2. Erstelle eine Klasse in einer DLL, die auch von Interface abgeleitet ist

    class MyDLL

    public Interface

    {
    // …
    };

und die Interface implementiert

  1. Erzeuge in der DLL zwei weitere exportierte Funktionen oder statische Methoden, welche

    Interface* createInstance()

und

void freeInstance(Interface\* p)

lauten und zum einen eine Instanz der MyDLL als Interface zurueckgeben bzw. diese wieder freigeben.

  1. Lade die Adressen fuer createInstance und freeInstance per LoadLibrary/GetProcAddress calls (siehe
    http://en.wikipedia.org/wiki/Dynamic_loading
    in entsprechende Pointer.

In C muss man ggf. ein bisschen mehr „frickeln“…

Gruss
E.

Hallo E.,

danke für Deine Antwort.

Nun kann ich gezielter suchen und die Verständnislücken füllen, wie ich hoffe.

Grüße,

I.

Nachtrag
Apropos, gerade aufgefallen, sollte natuerlich mit Typen versehen sein :wink:

struct Interface
{
 virtual int count() = 0;
 virtual int size() = 0;
}

Gruss
E.

Hallo I.

Du kannst auch so vorgehen:

* einen Unterordner „plugins“ machen.
* weitere exe dort reinschmeissen.
* Im Hauptprogramm dann die Stringliste von „./plugins“ kriegen
(im MSDN FindFirstFile() etc.)
* deinen Benutzern als die „Dialoge“ anzeigen
* die selektierte mit ShellExecute() starten.
* den Return per Datei oder Pipe machen, oder wie immer.

Eins ist schon so: modale Child-Windows macht man auf diese Weise keine, die Fenster sind immer beide aktiv.

viel Spass wünscht
Martin

Natürlich kannst du die Stringliste von „./plugins“ auch per DOS kriegen:

system("dir ./plugins/\*.exe \> dirlist.txt");

und die dann auswerten.

Martin