PluginLib [2.1]

    • Release

    Es gibt 125 Antworten in diesem Thema. Der letzte Beitrag () ist von ClonkAndre.

      Muss man das irgendwie alles so kompliziert machen? Ich hab jetzt einfach mal diesen Code:

      VB.NET-Quellcode

      1. PluginManager.LoadPlugin(Application.StartupPath & "\Plugins\" & e.ClickedItem.Text & ".dll")


      Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

      Kann man das nicht einfach so machen?
      Doch kannst du.
      Schau dir mal die Exceptions an die die Funktion wirft und fange sie ab, um zu sehen, wo der Fehler liegt. Ist der Pfad auch 100% richtig?
      Folgende Exceptions können geworfen werden:

      VB.NET-Quellcode

      1. System.IO.FileNotFoundException = Die Datei existiert nicht.
      2. PluginLib.NoDLLException = Die Datei ist keine DLL.
      3. PluginLib.NoAssemblyDLLException = Die Datei ist keine .NET Assembly DLL.
      4. PluginLib.NoCallableObjectException = Namespace oder Klasse nicht gefunden.
      5. PluginLib.NoInstanceException = Instanz des Plugins konnte nicht erstellt werden.
      6. PluginLib.NeededVariableNotFoundException = Eine unbedingt benötigte Variable wurde nicht gefunden.
      7. PluginLib.NeededMethodNotFoundException = Eine unbedingt benötigte Methode wurde nicht gefunden.


      Gruß
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      Hi.
      Naja ist doch eigentlich ganz einfach. Wenn du eine Methode als benötigt markierst (z.B. PluginManager.AddMethod("TestMethode")) und diese Methode dann nicht existiert, wird eine Exception geworfen.

      VB.NET-Quellcode

      1. PluginManager.AddMethod("TestMethode")
      2. PluginManager.AddVariable("TestVariable")
      3. Try
      4. PluginManager.LoadPlugin(Application.StartupPath & "\Plugins\" & e.ClickedItem.Text & ".dll")
      5. Catch ex As PluginLib.NeededMethodNotFoundException
      6. MsgBox("Methode wurde nicht gefunden: " + ex.MethodName)
      7. Catch ex As PluginLib.NeededVariableNotFoundException
      8. MsgBox("Variable wurde nicht gefunden: " + ex.VariableName)
      9. End Try
      10. MsgBox("Alles Ok!")


      Gruß
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      Hi.

      VB.NET-Quellcode

      1. PluginManager.GetPlugin("Pluginname").GetMethod("TestMethode").Invoke(New Object() {"Hallo Welt!"})


      Würde die Funktion Pluginname.TestMethode("HalloWelt") aufrufen (also String)

      Gruß
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      OK, Danke. Und was, wenn der Parameter einen anderen Typ hat?
      EDIT: Und was genau bedeutet die NoInstanceException. Wollte eine DLL laden und dann kam dieser Fehler.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Beep!“ ()

      Du hast wahrscheinlich irgendeinen Fehler. Es kann sein, dass du beim Erstellen der PluginLib Instanz die falschen Namein eingetragen hast.

      VB.NET-Quellcode

      1. New PluginLib.PluginLib("$plugin", "Blar")

      Bei dem Beispiel muss die DLL den Namen den gleichen Namen haben, wie der Projektname.
      Also Projektname = Dateiname. Der 2. Parameter gibt den Klassennamen an.

      Also für TestPlugin.dll muss der Projektname TestPlugin lauten und die Klasse so aussehen:

      VB.NET-Quellcode

      1. Public Class Blar


      Gruß
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      Jap. Das liegt daran, dass erst dann überprüft werden kann, ob alles Glatt gelaufen ist. Hast du den Projektnamen auch wirklich so genannt, wie oben beschrieben?

      Gruß
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      Dann zeig doch mal, wie deine DLL heißt, wie der Projektname ist und wie die Klasse heißt. Dann poste die Zeile, in der du PluginLib instanzierst.

      Gruß
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

      OK danke für die Info. Ich hab für ein Kunden mal ein Programm geschrieben, das ein Plugin-System verwendet. Und die Plugins haben Subs, Functions & Propertys.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

      Hi.
      Ich habe nun Support für Properties eingebaut. Da ich einfach davon ausgehe, dass es funktioniert, habe ich weder Tests durchgeführt noch das Beispiel erweitert, da ich mich mit Properties (wie gesagt) nicht / kaum auskenne. Ich hoffe mal, dass wenn es nicht geht, mir jemand Bericht darüber erstatten kann.

      Gruß
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.