Du bist nicht angemeldet.

[Release] PluginLib [2.1]

Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

1

Sonntag, 4. Oktober 2009, 02:36

PluginLib [2.1]

Beschreibung
PluginLib ist eine umfangreiche Bibliothek, die das einfache Verwalten von Plugins für ein Programm ermöglicht. Vielerlei Methoden lassen die Plugins beliebig anpassen und auf das Programm zuschneiden. Eigene Speicherverwaltung entfällt, sämtliche Fehler werden durch Excecptions abgefangen und weitergeleitet. Zusätzlich ist PluginLib vollständig kommentiert!

Features / Funktionen
  • Einfaches Laden via LoadPlugin(Path) und LoadPlugin(Path, Streamed)
    • Streamed gibt an, ob die Datei im Speicher gehalten wird. Wenn Streamed auf true gesetzt wird, kann die DLL solange sie geladen ist nicht verändert oder gelöscht werden
  • Durchdachtes Objekt orientiertes Konzept
  • Festlegen von Namespace und Klassenname
  • Hinzufügen von optionalen oder benötigten Variablen
    • Variablen können durch Object() in alle möglichen Typen konvertiert werden und sind nicht auf einige, wenige Typen begrenzt!
    • GetName() Methode lässt jederzeit auf Namen schließen
    • GetValue() gibt den aktuellen Wert der Variable zurück
    • SetValue() setzt einen Wert für die Variable

  • Hinzufügen von optionalen oder benötigten Properties
    • Properties können durch Object() in alle möglichen Typen konvertiert werden und sind nicht auf einige, wenige Typen begrenzt!
    • GetName() Methode lässt jederzeit auf Namen schließen
    • GetValue() gibt den aktuellen Wert der Property zurück
    • SetValue() setzt einen Wert für die Property

  • Hinzufügen von optionalen oder benötigen Methoden / Funktionen
    • Rückgabewerte können durch Object() in alle möglichen Typen konvertiert werden und sind nicht auf einige, wenige Typen begrenzt!
    • GetName() Methode lässt jederzeit auf Namen schließen
    • GetMethodInfo() gibt ein vollständiges MethodInfo-Objekt zurück
    • Invoke() ruft die Methode entweder mit oder ohne Parameter auf

  • Plugin via vollständigem Pfad laden oder gleich alle Plugins in einem Ordner laden
  • Plugin kann via DLL-Name angesprochen werden oder eine Schleife wird mittels GetPlugins() realisiert
  • InvokeMethodOnAllPlugins() ruft eine Methode entweder mit oder ohne Parameter in allen Plugins auf, so können Events in einer Zeile realisiert werden


ToDo
(Vorerst vollständig)
Noch mehr Ideen? Her damit!

Daten
Sprache: VB.NET (Plugins & Programme können dank Assembly in allen .NET Sprachen geschrieben werden)
.NET Framework: 2.0
Autor: Chrisber
Letzter Build: 14. August 2010
Version: 2.1
Dateigröße: 12,0 Kilobyte (+ 22,5 Kilobyte Dokumentationsdatei)
Lizenztyp: Freeware, Closed Source

Screenshot
(nicht vorhanden da dies eine Bibliothek ist)

Download
PluginLib - DLL zum einbinden (7,33 Kilobyte)
PluginLibTest - Beispielcode (Projekt) + Binary + Test Plugin (56,1 Kilobyte)
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Chrisber« (14. August 2010, 16:32)


  • »xXMichaelXx« ist männlich

Beiträge: 1 146

Dabei seit: 22. Mai 2009

Frühere Benutzernamen: xXMichaelXx

Hilfreich-Bewertungen: 14

  • Private Nachricht senden

2

Sonntag, 4. Oktober 2009, 14:31

Woa!
Sehr gut Gemacht!
whitehouse:~$ rm -f /bin/laden

Bunni

Registrierter Benutzer

  • »Bunni« ist männlich

Beiträge: 281

Dabei seit: 1. Februar 2009

Wohnort: Andernach

Frühere Benutzernamen: Bunni

Hilfreich-Bewertungen: 1

  • Private Nachricht senden

3

Sonntag, 4. Oktober 2009, 14:43

finde ich auch
darf man die dll einkompliemieren


singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

4

Sonntag, 4. Oktober 2009, 15:11

Werd es mir mal anschauen. Ich hab so was ähnliches mal für einen Kunden geschrieben.
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

5

Sonntag, 4. Oktober 2009, 18:12

Hi.
@ Bunni: Ja darfst du machen. Ein Hinweis auf den Autor wäre zwar schön, aber nicht zwingend.
@ andere: Danke :)

~ Chris
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

cpu_johnny

I'm CEO, bitch.

  • »cpu_johnny« ist männlich

Beiträge: 261

Dabei seit: 7. Februar 2009

Wohnort: Kleinberhofen (am Arsch der Welt)

Hilfreich-Bewertungen: 68

  • Private Nachricht senden

6

Sonntag, 4. Oktober 2009, 19:10

Erweckt einen sinnvollen Eindruck ;) :D

LG, Johnny
Verkaufe 2 Computer, billig.
(Grund: Wechsel auf 15" MacBook Pro)


Apple MacBook Pro 13" mit 2x 2.66GHz, 320GB, 2GB RAM, normale Gebrauchsspuren, Zubehör und Tasche, ca. 730 €

Selbst gebauter PC (Neupreis: 1680 €, 2 Jahre alt) - 2x 3.17GHz, 4GB RAM, Nvidia GTX 285 (!!), Ultraleise!, Software: Orginal Windows Vista Ultimate x64, 3D Mark, GRID, 580€ ohne OS, 610€ mit (s.o.)

Details auf Nachfrage ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cpu_johnny« (13. April 2011, 17:58)


Beep!

Registrierter Benutzer

  • »Beep!« ist männlich

Beiträge: 931

Dabei seit: 7. März 2009

Wohnort: Wien (A)

Hilfreich-Bewertungen: 25

  • Private Nachricht senden

7

Sonntag, 4. Oktober 2009, 20:14

Scheint ziemlich nützlich zu sein :thumbup:
Für alle, die bequem ihre Programmeinstellungen speichern möchten: [Open Source] INI 2.1
  • Intelligentes und objektorientiertes Konzept
  • Nützliche und übersichtliche Features
  • Umfangreiche Einsatzmöglichkeiten


Geld war stets rar, wie Dateiarchive.

SAR-71

Programmierer aus Leidenschaft

  • »SAR-71« ist männlich

Beiträge: 429

Dabei seit: 11. März 2009

Wohnort: Hamburg

Hilfreich-Bewertungen: 65

  • Private Nachricht senden

8

Montag, 5. Oktober 2009, 07:29

Ich kann es mir leider nicht ansehen (Es ist keine .exe vorhanden und wenn das Projekt starte ballert mich VB mit Fehlermeldungen zu)

Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

9

Montag, 5. Oktober 2009, 18:59

Ähm, in der PluginLibTest.zip ist sehr wohl eine Exe dabei (bin/Release/)
Damit das ganze compiled musst du die PluginLib.dll dem Projekt als Verweis hinzufügen und dann importieren.

~ Chris
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

10

Montag, 12. Oktober 2009, 17:41

Kannst du vllt. noch erklären, wie deine PluginLib arbeitet und ob man auch Funktionen, die im Plugin drin stecken, starten kann.
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

11

Montag, 12. Oktober 2009, 22:26

Ja, natürlich kann man das, sonst wäre die PluginLib wohl ziemlich nutzlos?!
Les dir mal den ersten Post ausführlich durch und guck dir das Beispielprojekt an. Dort liegt ein Testplugin und ein Testprogramm bei, dass sowohl Variablen ausliest und Funktionen aufruft.

Gruß
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

12

Dienstag, 13. Oktober 2009, 12:35

Ja, natürlich kann man das, sonst wäre die PluginLib wohl ziemlich nutzlos?!
Les dir mal den ersten Post ausführlich durch und guck dir das Beispielprojekt an. Dort liegt ein Testplugin und ein Testprogramm bei, dass sowohl Variablen ausliest und Funktionen aufruft.

Gruß
Ok danke. ich hab mir das Beispiel angeschaut und da wird lediglich ein paar Variablen abgefragt, könntest du das Beispiel noch erweitern, das man auch sieht wie man Funktionen startet.
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

13

Dienstag, 13. Oktober 2009, 15:00

O_O
Natürlich werden da Funktionen aufgerufen, sogar 2 Stück.

PluginLibTest.vb
-> Zeile 48: TestMethode
-> Zeile 57: PluginBeenden

Gruß
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

14

Mittwoch, 14. Oktober 2009, 11:56

OK danke. Wie funktioniert das eigentlich wenn ich eine Function in dem Plugin habe und diese soll einen Wert an das Hauptprogramm zurückgeben. Und wie sieht das mit den Propertys aus?
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

15

Mittwoch, 14. Oktober 2009, 13:37

Die Funktion Plugin.Invoke() gibt ein Object zurück.
Folgendes Beispiel:

Die aufzurufende Funktion aus dem Plugin:

Visual Basic Quellcode

1
2
3
4
5
Public Function RufMichAuf() As String
    ' Irgendwas berechnen
    ' BlaBlub
    Return "Hallo, das ist ein Test"
End Function


Das Programm, dass die Funktion aufruft:

Visual Basic Quellcode

1
2
3
4
Dim Rueckgabe As Object = PluginManager.GetMethod("RufMichAuf").Invoke(New Object() { })
Dim Text As String = Rueckgabe.ToString() ' Alternativ: Convert.ToString(Rueckgabe)

MessageBox.Show("RufMichAuf hat folgenden Text zurueckgegeben:" + vbNewLine + Text)


Das einfache konvertieren ist möglich, da alle Typen in .NET von Object abgeleitet sind.

Gruß
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

16

Mittwoch, 14. Oktober 2009, 13:47

Die Funktion Plugin.Invoke() gibt ein Object zurück.
Folgendes Beispiel:

Die aufzurufende Funktion aus dem Plugin:

Visual Basic Quellcode

1
2
3
4
5
Public Function RufMichAuf() As String
    ' Irgendwas berechnen
    ' BlaBlub
    Return "Hallo, das ist ein Test"
End Function


Das Programm, dass die Funktion aufruft:

Visual Basic Quellcode

1
2
3
4
Dim Rueckgabe As Object = PluginManager.GetMethod("RufMichAuf").Invoke(New Object() { })
Dim Text As String = Rueckgabe.ToString() ' Alternativ: Convert.ToString(Rueckgabe)

MessageBox.Show("RufMichAuf hat folgenden Text zurueckgegeben:" + vbNewLine + Text)


Das einfache konvertieren ist möglich, da alle Typen in .NET von Object abgeleitet sind.

Gruß
Ok danke und wie sieht es aus wenn ich im Plugin-Propertys verwende.

Edit:
Ich habe dein Beispiel jetzt mal in dein PluginTest geschrieben und jetzt kommt die Fehlermeldung

Zitat

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »singu« (14. Oktober 2009, 15:49)


Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

17

Mittwoch, 14. Oktober 2009, 16:52

Du musst mir schon den Code zeigen sonst sehe ich nichts.
Properties können mit GetVariable ausgelesen werden (glaube ich).

Gruß
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

18

Mittwoch, 14. Oktober 2009, 17:45

Hier mal der bisherige Code.

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Imports System.IO
Imports System.Reflection

Module Module1

	Public Sub Main()

    	Dim locPlugin As New PluginLib.PluginLib.PluginLib("$plugin", "PluginLibTest")
    	With locPlugin
        	Console.WriteLine("Instanz von PluginLib erstellt.")
        	.AddVariable("PluginName")
        	Console.WriteLine("PluginName wird als Variable vorausgesetzt.")
        	.AddVariableOptional("PluginVersion", "1.0.0.0")
        	Console.WriteLine("PluginVersion kann zus" & ChrW(228) & "tzlich angegeben werden.")
        	.AddMethod("TestMethode")
        	.AddMethod("RunPlugin")
        	.AddMethod("GetInfo")
        	Console.WriteLine("TestMethode muss zum Aufrufen vorhanden sein!")
        	.AddMethodOptional("PluginBeenden")
        	Console.WriteLine("PluginBeenden wird dann aufgerufen, wenn das Programm beendet wird.")
        	.LoadPlugins((Path.GetDirectoryName(Assembly.GetExecutingAssembly.GetName.CodeBase).Replace("file:\", Nothing) & "\Plugins"), SearchOption.TopDirectoryOnly)
        	Console.WriteLine("Alle Plugins aus dem Plugins-Ordner wurden geladen.")
        	Console.WriteLine("")
        	Dim locPair As KeyValuePair(Of String, PluginLib.PluginLib.Plugin)
        	For Each locPair In .GetPlugins

            	Console.WriteLine("Neues Plugin gefunden: " & locPair.Key)
            	Console.WriteLine("Pluginname: " & locPair.Value.GetVariable("PluginName").GetValue.ToString)
            	Console.WriteLine("Pluginversion: " & locPair.Value.GetVariable("PluginVersion").GetValue.ToString)
            	locPair.Value.GetMethod("TestMethode").Invoke(New Object() {"Hallo Welt!"})
            	locPair.Value.GetMethod("RunPlugin").Invoke()
            	Dim locReturn As Object = locPair.Value.GetMethod("GetInfo").Invoke(New Object() {"Test"})
            	MsgBox(Convert.ToString(locReturn))
            	Console.WriteLine("TestMethode wurde aufgerufen")
            	Console.WriteLine("")
        	Next
        	Console.ReadKey()
        	.InvokeMethodOnAllPlugins("PluginBeenden")
    	End With

	End Sub

End Module
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

19

Donnerstag, 15. Oktober 2009, 04:22

Sicher, dass die Funktion auch existiert und einen String annimt? Um welche Zeile handelt es sich genau (ich vermute mal 32).

Gruß
» Alle sagten: das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht.

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

20

Donnerstag, 15. Oktober 2009, 09:03

Sicher, dass die Funktion auch existiert und einen String annimt? Um welche Zeile handelt es sich genau (ich vermute mal 32).

Gruß
Es funktioniert jetzt auf einmal. Keine Ahnung an was es lag.

Edit: Das mit den Propertys geht nicht. Kannst du erklären wie das geht?
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »singu« (15. Oktober 2009, 11:03)


Social Bookmarks