PluginLib [2.1]

    • Release

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

      Hi,

      ich mache leider irgendetwas falsch.

      Ich hab folgende Klasse:

      VB.NET-Quellcode

      1. Public Class Main
      2. 'LCD232 by tbspace.de/Manawyrm
      3. 'Driver Implementation
      4. Public DisplayType As String = "LCD" ' VFD or LCD
      5. Public Vendor As String = "tbspace.de"
      6. Public Model As String = "LCD232"
      7. Public Author As String = "Manawyrm"
      8. Public Sub Init(port As String, speed As Integer)
      9. MsgBox(port)
      10. MsgBox(speed)
      11. End Sub
      12. End Class


      und rufe so meine Methode auf:

      VB.NET-Quellcode

      1. chosenDisplay.Value.GetMethod("Init").Invoke(New Object() {"COM16", 9600})


      Das Abrufen von Variablen klappt wunderbar. Nur bei nem Methodenaufruf gibts ne NullReferenceException.

      Hat jemand ne Idee?

      Danke,
      Manawyrm

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

      @Chrisber: Auch wenn es keinen Support mehr gibt - ist es irgendwie möglich, ein Interface bereitzustellen? Ich habe es mal versucht, aber sobald in der Class des Plugins ein Implements [Interface].Irgendwas steht wird eine PluginLib.Needed...NotFoundException ausgelöst.
      Die Lib ist perfekt für mein vorhaben, jedoch hab ich ein kleines problem ...

      Hab Hab Ein Projekt erstellt -> modul hinzugefügt und in die Sub Mail folgendes:

      VB.NET-Quellcode

      1. Dim Manager As PluginLib.PluginLib = New PluginLib.PluginLib("$plugin", "PluginLibTest")
      2. Manager.AddVariable("PluginName")
      3. Manager.AddMethod("TestMethode")
      4. Manager.AddVariableOptional("PluginVersion", "1.0.0.0")
      5. Manager.AddMethodOptional("PluginBeenden")
      6. Try
      7. Manager.LoadPlugins(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Replace("file:", Nothing) + "\Plugins", IO.SearchOption.TopDirectoryOnly)
      8. Catch ex As Exception
      9. MsgBox(ex.ToString)
      10. End Try
      11. For Each Plugin As KeyValuePair(Of String, PluginLib.Plugin) In Manager.GetPlugins()
      12. MsgBox("Plugin geladen: " & Plugin.Value.GetVariable("PluginName").GetValue().ToString())
      13. Plugin.Value.GetMethod("TestSub").Invoke(New Object() {Form1.Label1})
      14. Next


      und ein weiteres projekt erstellt (projektname: "MyFirstPlugin" -> klassenbibliothek ("PluginLibTest) und dort eine klasse erstellt und dort folgender code:

      VB.NET-Quellcode

      1. Imports System.Windows.Forms
      2. Public Class PluginLibTest
      3. '
      4. ' Variables
      5. '
      6. Public PluginName As String = "TestPlugin für PluginLib :)"
      7. Public PluginVersion As String = "5.0.0.0"
      8. '
      9. ' Functions
      10. '
      11. Public Sub TestMethode(ByVal Text As String)
      12. ' MessageBox mit Text anzeigen
      13. MessageBox.Show(Text, "TestPlugin MessageBox", MessageBoxButtons.OK, MessageBoxIcon.Information)
      14. End Sub
      15. Public Sub PluginBeenden()
      16. ' Auf Wiedersehen!
      17. MessageBox.Show("Bis bald, auf Wiedersehen!", "TestPlugin MessageBox", MessageBoxButtons.OK, MessageBoxIcon.Information)
      18. End Sub
      19. End Class


      Leider functioniert das ganze nicht, ich erhalte in der Zeile:

      VB.NET-Quellcode

      1. Manager.LoadPlugins(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Replace("file:", Nothing) + "\Plugins", IO.SearchOption.TopDirectoryOnly)


      folgenden Fehler: (siehe anhang)
      Bilder
      • Unbenannt.JPG

        34,76 kB, 446×230, 74 mal angesehen
      Hey, gibt es auch die möglichkeit dass das geladene plugin auch zurück connected zu dem plugin um ein result zu senden? Ein beispiel:

      Was ist wenn man ein plugin hat das z.b in der C:/ festplatta alle files die mit der endung .jpg sucht, und dann das resultat an das plugin sendet wenn es fertig mit dem suchen ist, wie würde ich das am besten machen können?

      Danke :)