"Beste" Plugin Lib

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.

    Wenn du's so genau auf deine Bedürfnisse angepasst haben willst wie möglich, dann solltest du dir die Library selbst schreiben.
    Da muss ich dem ErfinderDesRades recht geben, so kompliziert ist das ganze nicht und lässt sich mit nur sehr wenigen zeilen machen. Habe mir das ganze vor kurzem mal angeschaut, darum hier etwas sourcecode^^

    Plugins laden:

    VB.NET-Quellcode

    1. For Each plugin As String In System.IO.Directory.GetFiles(My.Application.Info.DirectoryPath, "*.dll")
    2. Dim myplugin As IZeichenobjekt = PlugInConnector.LoadPlugIn(plugin)
    3. If myplugin IsNot Nothing Then
    4. Plugins.Add(myplugin)
    5. End If
    6. Next
    7. Public Shared Function LoadPlugIn(ByVal strFile As String) As IZeichenobjekt
    8. Dim vPlugIn As IZeichenobjekt
    9. Dim a As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile(strFile)
    10. Dim types() As Type = a.GetTypes
    11. For Each pType As Type In types
    12. Try
    13. vPlugIn = CType(a.CreateInstance(pType.FullName), IZeichenobjekt)
    14. Return vPlugIn
    15. Catch ex As Exception
    16. End Try
    17. Next
    18. 'keine gültige dll gefunden
    19. Return Nothing
    20. End Function



    Ein Interface, dass alle Plugins gemeinsam haben. Das ist der eigentliche Knackpunkt, denn nur ein durchdachtes Interface bringt den gewollten nutzen:

    VB.NET-Quellcode

    1. Public Interface IZeichenobjekt
    2. Sub Draw(ByVal e As Graphics) 'jedes zeichenobjekt muss wissen wie es sich zu zeichnen hat...
    3. Property Rec() As Rectangle '..und wo
    4. Property Bezeichnung() As String 'man will ja im voraus sehen ob es sich um ein dreieck, viereck oder kreis handelt..
    5. End Interface




    Wie gesagt, das war mein erster test^^ Ziel war es, diverse Objekte (sehr einfache objekte... Kreise, Vierecke, etc) aus plugins laden zu können und dann in der Hauptanwendung per mausklick auf die form setzten zu lassen (dafür ist CreateInstance ein gutes Stichwort). Wäre für ein Zeichenprogramm ganz interessant da der entwickler sicher besseres zutun hat als tausende vorgefertigte Objekte bereit zu stellen
    Beschreib doch erst mal genau, was Du eigentlich machen willst, damit wir nicht alle aneinander vorbei reden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Manawyrm schrieb:

    Treiber ... als DLL
    ???
    Hab ich den technischen Fortschritt versäumt oder hast Du Begriffe nicht exakt verwendet? :S
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    "Ein Gerätetreiber, häufig kurz nur Treiber genannt, ist ein Computerprogramm oder Softwaremodul, das die Interaktion mit angeschlossenen, eingebauten (Hardware) oder seltener virtuellen (virtuellen) Geräten steuert. "

    Ist die Definition laut Wiki.

    Und genau das tun die Plugins bei mir. Sie steuern mit ner einheitlichen Schnittstelle Hardware an.

    Manawyrm schrieb:

    Ist die Definition laut Wiki.

    Da machen wir auf Arbeit wohl alles falsch. :D :D :D
    Wenn ich im Gerätemanager einen Treiber aktualisiere, werden sys-Dateien angefasst.
    DLLs kommunizieren über diese Treiber mit dem Gerät, und wenn Ihr eine einheitliche Hardware-Schnittstelle habt, habt Ihr eine einheitliche Hardware-Schnittstelle, könnte man ggf. auch SDK nennen, aber nicht Treiber.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!