vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 15:04

Klasse ! Vielen lieben Dank! Werd mir das gleich mal anschauen...

Und für die kompetente Hilfe, werd ich mir gleich wieder die neue vbArchiv DVD holen, wenn denn demnächst mal wieder ne neue erscheint ? Weiß das eigentlich jemand, wann wieder eine neue kommt ?

Und zu deiner Frage: Nein, das wurde im anderen Forum leider nicht behandelt. Dort bin ich aber auch nicht aktiv und es kann sein, dass ich es überlesen habe. Bin auf das Tutorial nur durch Onkel Google gestoßen. Auf vbarchiv findet man bei google leider keine tutorials über plugins...

LG,

Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Plugin System in VB.NET 
Autor: xater
Datum: 03.03.12 19:22

Hallo zusammen,

meine Frage beruht auf folgendem Tutorial:
http://www.vb-paradise.de/allgemeines/tipps-tricks-und-tutorials/allgemein/8747-wie-erstelle-ich-ein-plugin-system-unter-vb-net-framework-2/

Wie kann ich denn über oben erwähntes Tutorial ein Array als Return Parameter meiner Funktion im Plugin zurück geben ? Leider bekomme ich das nicht so wirlich hin =/ Vielleicht kann mir ja einer auf die Sprünge helfen ?

LG,

Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: ModeratorDaveS (Moderator)
Datum: 04.03.12 09:14

Und warum fragst du nicht im angegebenen Forum danach? Wir haben hier auch Tutorials für Plugins.
Und ein Array als Ergebnis einer Funktion wird einfach als solches deklariert.
Public Function MyFunc(...) As Integer()
    Return New Integer() {1, 2, 3}
End Function

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 10:34

Hallo Dave,

vielen Dank für deine Antwort ! So hab ich es auch ähnlich gemacht:

Interface
'Imports System.Reflection.Emit
 
'hier müssen alle öffentlichen members aufgeführt werden, welche die 
' schnittstelle transportieren soll.
Public Interface MyInterface
 
    'z.b. funktion
    Function Addieren() As String
 
    'z.b. property
    ReadOnly Property Datum() As Date
 
    'Sub Menuitem() 
    Function Menuitem() As Array
End Interface
Client
'eine einfache plugin dll
Public Class myClient
    Implements [interface].MyInterface
 
    Public Function Addieren() As String Implements _
      [interface].MyInterface.Addieren
        Return "hallo"
    End Function
 
    Public ReadOnly Property Datum() As Date Implements _
      [Interface].myInterface.Datum
        Get
            Return Now
        End Get
    End Property
 
    Public Function Menuitem() As Array Implements _
      [interface].MyInterface.Menuitem
        Return New Integer() {1, 2, 3}
    End Function
 
End Class
Auszug der Form1:
Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) _
  Handles Button1.Click
        Dim returnarray As String
 
        Dim MenItem As ToolStripMenuItem = CType(start.MenuStrip1.Items.Add( _
          "Plugins"), ToolStripMenuItem)
 
        returnarray = myplugin.Menuitem()
 
        MenItem.DropDownItems.Add(returnarray(0))
 
    End Sub
Sobald ich nun auf den Button drücke, bekomme ich auf der Form in der Zeile:
returnarray = myplugin.Menuitem()
folgenden Fehler:
[u]Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Vielen dank schon mal im Voraus für eine Antwort =) LG,

Michael

Beitrag wurde zuletzt am 04.03.12 um 10:36:02 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: Manfred X
Datum: 04.03.12 10:52

Dein MenuItem gibt ein System.Array zurück,
dessen Element-Datentyp nicht näher definiert ist.
(Deklariere - falls möglich - explizit einen Typ).

Der Client liefert ein Integer-Array, das aber in
Form1 einer StringVariable zugewiesen wird ????

Wo wird die Instanz von "MyPlugin" in Form1 erstellt?
Ich vermute, die gibt es nicht.

Beitrag wurde zuletzt am 04.03.12 um 10:52:46 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 11:10

Hallo Manfred,

das mit dem Integer war eigentlich nur wegen dem Testen. Später sollen dort Strings verschoben werden und keine Integer. Was die Form angeht, so wir eine Instanz ganz am Anfang erstellt mit:

[u]Private myplugin As [Interface].myInterface

Wie definiere ich denn so einen Typ wie du vorgeschlagen hast ? Ich habe schon alle möglichen Deklarationen versucht, bekomme es aber einfach nicht hin.. =/ LG,

Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: Manfred X
Datum: 04.03.12 11:29

Hallo!

Damit erstellst Du nur eine Zugriffsvariable, aber keine Instanz
des Plugin-Objekts.

Führst Du die Funktion LoadPlugin der "PluginConnector"-Klasse aus?

Vorsicht! Auf der von Dir verlinkten Seite enthält die
Funktion einen unverarbeiteten Try-Catch-Block, d.h. man
bemerkt nicht, wenn das Erstellen einer Objekt-Instanz aus der Assembly
schief geht.
Du erhälst lediglich Nothing zurück - dieser Fall scheint bei
Dir vorzuliegen. Fange mal die Ausnahme auf und ermittle
die Fehlermeldung.

Wie man ein Array mit explizitem Element-Datentyp deklariert:
siehe Beitrag von DaveS.

Beitrag wurde zuletzt am 04.03.12 um 11:36:40 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 11:36

Hallo,

ja die Funktion wird in der Form aufgerufen:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        'alle plugins laden - in unserem fall ja nur eines
        For Each plugin As String In Directory.GetFiles( _
          My.Application.Info.DirectoryPath, "PlugIns/*.dll")
            myplugin = PlugInConnector.LoadPlugIn(plugin)
            'lass uns hier mal die schleife beenden.
            'da sich unsere client dll im selben ordner wie die interface dll 
            ' befindet, kann es dazu kommen, dass das interface
            'zuletzt untersucht wird. dies würde dann unser gültiges plugin 
            ' überschreiben
            If myplugin IsNot Nothing Then Exit For
        Next
        If myplugin Is Nothing Then
            MessageBox.Show("Kein gültiges PlugIn gefunden !")
            Me.Close()
        End If
    End Sub
Auf Nothing wird dabei ja auch überprüft und eine MsgBox ausgegeben. Somit werden die DLL's auch geladen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 12:10

Sorry aber ich bekomm es einfach nicht hin.. =( Kann mir denn nicht irgend jemand bei der Form mit dem returnparameter helfen ? Sicherlich ist es nur was einfaches, aber ich steh so auf dem Schlauch, dass ich einfach nicht auf die Lösung komm... LG,

Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: Manfred X
Datum: 04.03.12 12:26

Das sollte aber funktionieren.

Mein Interface:
Public Interface myInterface
    ReadOnly Property MenuItemTexte As String()
End Interface
Mein Client:
Public Class myClient
    Implements Plugin_Test.myInterface
 
    Public ReadOnly Property MenuItemTexte As String() _
        Implements Plugin_Test.myInterface.MenuItemTexte
        Get
            Dim Menuitems() As String = {"Item1", "Item2", "Item3"}
            Return Menuitems
        End Get
    End Property
End Class
Mein Host:
myplugin = PlugInConnector.LoadPlugIn(plug)
Dim mit() As String = myplugin.MenuItemTexte
Leg die DLLs in verschiedene Verzeichnisse. Es wäre möglich,
dass Du das Interface statt des Clienten erwischt.

Beitrag wurde zuletzt am 04.03.12 um 12:54:35 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 13:08

Ich verstehe nicht was bei deinem Host die erste Zeile bringen soll ?!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: Manfred X
Datum: 04.03.12 13:13

Hallo!

Das ist der Aufruf der Shared-Methode zum Laden der Client-DLL.
Genau das machst Du auch ....
http://www.vbarchiv.net/forum/id22_i86334t86328_plugin-system-in-vbnet.html
(Dieser Schleife "traue" ich nicht. Gib mal den Pfad/Namen der Plugin.DLL (Client)
direkt an.)

Beitrag wurde zuletzt am 04.03.12 um 13:16:59 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 13:20

aber warum gibst du denn das wort plug der funktion weiter ? weil der kann damit ja überhaupt nichts anfangen ?! sorry wenn ich so hinterfrag, aber ich will ja was lernen ;)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: Manfred X
Datum: 04.03.12 13:27

Hallo!

Die Funktion "LoadPlugin" will als Parameter den Pfad/Namen des Files
haben, das geladen werden soll - also die Client.DLL

"Plug" ist der Name einer String-Variable, die diese Angabe enthält.
Bei mir ist sie so gefüllt ...
Dim plug As String = _
"F:\VBArchive\Demos\Plugin_Test\Plugin_Client\bin\Debug\Plugin_Client.dll"
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 14:37

Hallo Manfred,

vielen lieben Dank für die kompetente Hilfe ! Jetzt klappt auch alles... =) Aber jetzt habe ich doch noch so eine Frage am Rand, falls du mir die beantworten kannst.

Weißt du wie ich vom Plugin aus, auf eine Funktion in meiner Hauptanwendung zugreifen kann ? Wenn du mir da noch helfen würdest, wär ich dir total dankbar =)

LG,

Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: ModeratorDaveS (Moderator)
Datum: 04.03.12 14:59

Du kannst zB auch eine IHost-Interface deklarieren, und übergibst diese Interface zB im Constructor des Plugins.

Ein Beispiel findest du hier. Die Interfaces sind im ersten Beitrag des Threads deklariert. Wird das wirklich nicht erklärt im anderen Forum?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: Manfred X
Datum: 04.03.12 15:02

Hallo!

DaveS rät dazu, Klassen, die sowohl vom Host als auch
vom Client benutzt werden, in eine eigene DLL auszulagern.
http://www.vbarchiv.net/forum/id10_i45990t45907_plugin-soll-auf-funktionen-der-hostanwendung-zugreifen.html
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: ModeratorDaveS (Moderator)
Datum: 04.03.12 16:03

Dafür kann man direkt die Workshops anschauen zB
http://www.vbarchiv.net/workshop/workshop_93-erstellen-von-plugins-zum-erweitern-eigener-programme.html
Den Beitrag finde ich auch schnell mit Google...aber zugegeben, nicht jeder ist so stark in googlfu...

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 16:26

Also das habe ich auch gefunden. Allerdings finde ich, dass es wesentlich besser erklärte Tutorials gibt, als das oben erwähnte. Vor allem, da dort viele Codefragmente fehlen. ;) LG,

Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: ModeratorDaveS (Moderator)
Datum: 04.03.12 17:04

Naja, nothing is perfect. Immerhin gibt es auch eine IHost.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Plugin System in VB.NET 
Autor: xater
Datum: 04.03.12 17:21

Ja, is schon richtig ! Das mit der iHost werd ich mir auf jeden Fall im Laufe des Abends oder morgen gleich mal ansehen. Sobald ich das durchgearbeitet habe, meld ich mich hier nochmal zurück. Danke aber nochmals für die viele Hilfe ! =) LG,

Michael
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel