Komfortabler Dateimanager mit vielen Funktionen

AddIns in SpeedCommander 11 (Teil 1)

By Sven on 14.06.2005 - 19:13 in SpeedCommander 11

Seit einigen Jahren wünschen sich die Anwender immer wieder eine Pluginschnittstelle im SpeedCommander. Bisher hatte ich mich immer etwas dagegen gesperrt, weil ich vom Pluginkonzept anderer Anwendungen nicht ganz überzeugt war. Ein Plugin muss sich in die Anwendung integrieren können, es muss Befehle zur Verfügung stellen und es muss auch die Möglichkeit bestehen, diese Befehle aus Menüs und Symbolleisten aufzurufen. Die Konfiguration sollte möglichst einfach gehalten werden und nicht über viele Dialoge verstreut sein.

Nach vielen Überlegungen bin ich auf das AddIn-Konzept von Microsoft gestoßen, das unter anderem in den Office-Produkten und in Visual Studio eingesetzt wird. Diese AddIns können mit jeder Sprache entwickelt werden, mit der sich COM-Objekte erzeugen lassen. Dies ist ein großer Vorteil gegenüber dem klassischen Dll-Konzept mit einem Satz von exportierten Funktionen, da sich auch mit Visual Basic und dem .NET-Framework COM-Objekte programmieren lassen. Beim klassischen Dll-Konzept bleiben Visual Basic und .NET nämlich außen vor.

Ein AddIn ist ein COM-Objekt und bietet verschiedene Schnittstellen an. Zwingend erforderlich ist lediglich die Schnittstelle IDTExtensibility2, welche aus fünf Methoden besteht:

  • OnConnection
  • OnStartupComplete
  • OnBeginShutdown
  • OnDisconnection
  • OnAddInsUpdate

OnConnection wird aufgerufen, wenn das AddIn geladen wird. Das AddIn erhält jeweils einen Zeiger auf das Application-Interface von SpeedCommander und auf das Interface des AddIn-Objektes. Dazu bekommt es noch die Information, wie das AddIn geladen wurde. Dies kann einerseits gleich beim Starten von SpeedCommander geschehen oder später durch nachträgliche Installation oder Aktivierung des AddIns. Über das Application-Interface kann das AddIn später auf das umfangreiche Objektmodell von SpeedCommander zugreifen und z.B. neue Befehle oder eigene Symbolleisten erzeugen.

Wenn SpeedCommander komplett initialisiert wurde, wird bei allen geladenen AddIns die Methode OnStartupComplete aufgerufen. Hier kann das AddIn Funktionen aufrufen, die bei der Initialisierung eine Interaktion mit dem Benutzer erfordern. OnBeginShutdown wird aufgerufen, bevor SpeedCommander beendet wird. Das AddIn kann an dieser Stelle z.B. seine Einstellungen speichern.

Bevor das AddIn entladen wird, ruft SpeedCommander die Methode OnDisconnection auf. Dem AddIn wird hier auch der Grund des Entladens mitgeteilt. Das AddIn kann somit erkennen, ob es z.B. vom Anwender deinstalliert wurde und somit seine Einstellungsdaten löschen kann.

Die fünfte Methode OnAddInsUpdate wird aufgerufen, wenn ein anderes AddIn geladen wird. Wenn z.B. die AddIns A und B bereits geladen sind und später das AddIn C geladen wird, dann ruft SpeedCommander die Methode OnAddInsUpdate von AddIn A und B auf. Ist z.B. ein AddIn abhängig von einem anderen, so kann das AddIn hier prüfen, ob das andere AddIn geladen oder entladen wird.

Es gibt 11 Kommentare zu diesem Beitrag

Trackback URL | RSS-Feed für Kommentare

  1. Uwe sagt:

    Cool beschrieben, danke! Kann sicher auch mir mal als Ideengeber dienen 🙂

  2. Rober Wellmann sagt:

    > Beim klassischen Dll-Konzept bleiben Visual Basic und .NET nämlich außen vor.

    Das ist so nicht richtig, natürlich kann VB mit DLL’s umgehen, Funktionen aus den DLL’s aufrufen und sogar eine Art Callback integrieren. Davon ab macht COM aber natürlich mehr Sinn, da es komfortabler ist. Schön dass der SC nun auch bald Plugins unterstützt!

  3. Sven sagt:

    Ich meinte damit, dass man mit VB und .NET (meines Wissens nach) keine Dlls erstellen kann, die bestimmte Funktionen in C-Konvention exportieren. Das Importieren von Funktionen ist kein Problem.

  4. Justin sagt:

    Man kann mit VB ganz ganz theoretisch DLLs erstellen, die die Funktionen in C-Konvention exportieren. Dazu muss man sich aber zwischen den Linker und den Compiler hängen. Allerdings funktionieren diese DLLs bzw. Funktionen in diesen DLLS dann nicht mit allen Datentypen. Ansonsten kann VB nur ActiveX-DLLs erstellen, die aber keiner (C-)Konvention entsprechen 😉

  5. Uwe sagt:

    VB ist krank…

  6. Sven sagt:

    Ach Uwe, nur weil Du damit nicht klarkommst, ist es doch noch lange nicht krank. 😉

  7. Justin sagt:

    Krank würde ich auch nicht sagen, aber man wird schnell zu ungutem Programmierstil verleitet. Ansonsten ist VB gar nicht mal so schlecht, um „mal eben“ was zu „stricken“. Aber eine echte Herausforderung ist VB nicht, zumindest nicht für mich. Habe mich daher, nach 7 Jahren VB, auch anderen Programmiersprachen wie Java und C++ usw. gewidmet.
    Was ich in VB so toll finde ist das Error-Handling: „On Error Resume Next“, und man hat nie wieder Probleme 🙂

  8. Uwe sagt:

    Du hast S I E B E N Jahre gebraucht um herauszufinden, daß es „…keine echte Herausforderung ist…“ ist? Wow 😀

  9. Hanni sagt:

    wird es eine public beta geben sven ^^

  10. eric sagt:

    In ein paar Monaten bestimmt…

  11. Hanni sagt:

    warum funzt mein forum login alle paar wochen nicht mehr. ich glaub ich muss bei jemanden mal vorbeifahren ^^ :devil:

Top