Plug-in

servus,

ich würde gerne in meinem programm eine art plug-in schnittstelle programmieren, aber da ich sowas noch nie gemacht habe, habe ich auch keine ahnung wie das ganze aussehen kann und soll.

wie kann so eine schnittstelle ausschauen?

wie kann ich die plug-ins am besten in meinem programm übernehmen?
zum beispiel bei DLLs, wie kann ich die zur laufzeit initialisieren, damit ich die funktionen benüten kann?

hat jemand damit erfahrung?

Also: Plug-ins im originalen Sinne gibt’s leider nicht standardmäßig. Ganz ähnlich aber sind ActiveX, COM/DCOM und auch API(-Calls).

ActiveX: Können DLLs ohne grafische Oberfläche, DLLs mit graf. Oberfl. und EXEs mit graf. Oberfl. sein. Z.B. UserControls können einerseits direkt in VB als Modul eingebunden oder extra als ein ActiceX-Control-Projekt gestaltet werden. Oder auch per Projekt/References oder per Code über CreateObject(„datei.dll“).

Diese ActiveX-Componentes werden mit Hilfe von COM/DCOM angebsprochen, wobei diese nicht dezentral auf jedem Client installiert werden müssen.

API-Calls sind ähnlich, funktionieren aber ohne COM/DCOM. Ein „einfaches“ Declare einer Funktion oder Methode global im Projekt, und die DLL ist verfügbar. Ist aber eine kompliziert Methode, da nicht wirklich bekannt ist (außer in der Doku), wie die Aufrufe genau auszusehen haben.

Aber Deine Frage - glaube ich - zielt eher darauf hin, wie Du sinnvoll Dein Programm erweitern kannst, ohne die Basis ändern zu müssen. In diesem Fall würde ich dir zu ActiveX-Komponenten raten - eines für die PlugIn-Schnittstelle (plugbase.dll) und andere für die PlugIns direkt. Die plugbase.dll deshalb, da ja das Hauptprogramm eingentlich nix mit neuen PlugIns anfangen kann - mal angenommen. Jedesmal, wenn Du nun ein neues PlugIn auslieferst, legst Du die plugbase.dll hinzu, welche alle PlugIns kennt.

Wenn Du mir noch sagst, welche Funktionen das Hauptprogramm hat und welche Du via PlugIns erweitern willst, kann ich Dir event. weitere Hints geben.

LG, Stefan.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi,

stimmt du hast recht, ich will nur leicht ein programm
erweitern ohne es jetzt neu zu komplien.

ich bin gerade dabei ein erweitertes file-renamer programm zu
schreiben und jetzt will ich eine art plug-in system einführen,
damit auch andere user daran arbeiten können und erweitern.

zb.:
jemand will auch MP3 dateien mit den Tags unbenennen, also
bastelt er oder sie eine DLL und das wars schon.

mir fehlt eigentlich nur eine sache, wie kann ich eine DLL
initialiseren wenn ich nicht im programm-code dies festgelegt
habe.
das ganze mit der plugin.dll ist zwar gut, aber ich will nicht
das das man von der datei abhänig ist, jeder soll nur eine DLL
in einem speziellen verzeichnis kopieren und schon funktioniert
es.

verstehst was ich meine?

Ja, ich verstehe Dich! Aber eine Lösung, wie Du Sie anstrebst, ist so in VB nicht möglich - zumindest mit ActiveX, da _muß_ eine codierte Referenz bestehen. Deine Plugins sollen ja auch eine GUI haben, oder?

Ich bin am Ende mit meinem Latein - könnte zwar parallel weiterforschen, doch das wird Dir nicht viel bringen. Jedoch habe ich in der MSDN was ähnlich gefunden: OLE-Container sollen dynamisches Laden unterstützen… Vielleicht ist das die Lösung?

Wenn Du was gefunden hast, bin ich sehr, sehr daran interessiert!!

/stefan