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

41

Donnerstag, 22. Oktober 2009, 14:47

Hi.
Achja :D
Irgendwie habe ich komplett vergessen, dass man das auch gebrauchen könnte. Das war eigentlich nur zur Datenweitergabe gedacht. Aber wenn du es schon sagst, werde ich es gleich mal einbauen ;)

EDIT: Fertig + getestet

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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chrisber« (22. Oktober 2009, 15:01)


singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

42

Donnerstag, 22. Oktober 2009, 16:13

Werde es testen, sobald ich Zeit habe.
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


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

43

Donnerstag, 22. Oktober 2009, 18:04

Das ist der Code:

Visual Basic Quellcode

1
2
Dim plugin As New PluginLib.PluginLib("INIEdit.Export.KeyValue", "ExportKeyValue")
plugin.LoadPlugin("INIEdit.Export.KeyValue.dll")


Das Projekt heißt: INIEdit.Export.KeyValue
Die Datei heißt: INIEdit.Export.KeyValue.dll
Die Klasse heißt: ExportKeyValue
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.

Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

44

Donnerstag, 22. Oktober 2009, 18:09

Hi.
Ohne dir die Lauen vermiesen zu wollen - bist du sicher, dass es möglich ist, Projektnamen mit Punkten zu versehen? Probiere es mal testweise mit Unterstrichen. Falls es daran lag, werde ich mir was einfallen lassen, um auch Punkte zu ermöglichen ;)

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

45

Donnerstag, 22. Oktober 2009, 19:00

Müssen die Plugins eigentlich ähnlich aufgebaut sein, also alle Plugins müssen die selben Variablen, Methoden & Propertys haben
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

46

Donnerstag, 22. Oktober 2009, 20:32

Ja.
Sonst wäre das ganze ja sinnlos. Das ist bei einem Pluginsystem Voraussetzung, um es Modular zu halten.

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

47

Donnerstag, 22. Oktober 2009, 20:50

Ja.
Sonst wäre das ganze ja sinnlos. Das ist bei einem Pluginsystem Voraussetzung, um es Modular zu halten.

Gruß
OK. Und wieso braucht man bei deinem Plugin-System "System.Collections.Generic.KeyValuePair". Ich hab mir das Beispielprojekt mal angeschaut und ich finde es unübersichtlich.
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

48

Donnerstag, 22. Oktober 2009, 20:54

Brauchen tust du das nur, wenn du alle Plugins durchgehst. Und wo ist das Problem? KeyValuePair ist der stinknormale Iteratortyp für System.Collections.Generic.Dictionary. Das heißt, du kannst auf Objekte mit ( und ) zugreifen.
Beispiel:

Visual Basic Quellcode

1
2
3
4
5
Dim X As Dictionary(Of String, PluginLib.Plugin) = PluginManager.GetPlugins()
For Each Y As KeyValuePair(Of String, PluginLib.Plugin) In X
    ' Pluginname = Y.Key
    ' Plugin-Klasseninstanz = Y.Value
Next


Dictionary ist das gleiche wie List bzw. ArrayList nur halt mit einem Schlüssel (also es wird ein beliebiger Typ als Schlüssel verwendet und kein Index als Integer).

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

49

Donnerstag, 22. Oktober 2009, 21:03

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


m0nst3rkill3r

Registrierter Benutzer

Beiträge: 804

Dabei seit: 10. Oktober 2009

Wohnort: k

Frühere Benutzernamen: m0nst3rkill3r

Hilfreich-Bewertungen: 257

  • Private Nachricht senden

50

Donnerstag, 22. Oktober 2009, 22:48

Gefällt mir echt super gut, leider schreibe ich kein Projekt zu dem ich Plugins brauche, lads mir aber vorsichtshaber mal runter :D

Zitat von »"http://forums.macrumors.com/showpost.php?s=9e0078570b2b62fd044cc1b13d212b09&p=4777525&postcount=1064"«

When talking about how apple cannot influence the future of computers, you also forgot to mention that the internet was created on a network of macs to start with. Thats why every online PeeCee has a MAC code. Even my PSP needs a MAC code to get online....
~2000€ für nen brauchbaren Mac sind imho 2100€ zu viel. - SamusTyp

  • »CrashOverride2242« ist männlich

Beiträge: 73

Dabei seit: 7. September 2009

Frühere Benutzernamen: CrashOverride2242

Hilfreich-Bewertungen: 2

  • Private Nachricht senden

51

Freitag, 1. Januar 2010, 16:30

könnte einer mal bitte ein neuen dl posten ? der beim anfangspost geht nicht
Mit freundlichen Grüßen,
Jan

dark-smile

Registrierter Benutzer

  • »dark-smile« ist männlich

Beiträge: 99

Dabei seit: 15. März 2009

Wohnort: Weimar

  • Private Nachricht senden

52

Donnerstag, 21. Januar 2010, 09:13

Bin ich auch dafür,bitte neu uploaden :)

Razer

Registrierter Benutzer

  • »Razer« ist männlich

Beiträge: 88

Dabei seit: 1. Februar 2008

  • Private Nachricht senden

53

Sonntag, 21. Februar 2010, 00:59

@Chrisber:
Ich hab die Lib noch nicht getestet, bin aber daran interessiert.
Zugegeben hab ich zu viel mit TKMap zu tun. Allein ist das einfach viel viel Arbeit.

Eine Hauptkomponente wird das Pluginsystem. Das ist eines der wenigen aber wichtigen Dinge
die TKMap so besonders machen sollen.

Die Plugins sollen am Start geladen werden (per Interface geerbeter Aufruf) und im Programm
sollen dann MenuItems usw. freiräumig platziert werden können (von den Plugins selbst), sowie
das handlen von deren Events.


Wie siehts mit der Lib aus? Schafft die das?

Da wären halt dann noch Sachen mit dem ganzen rechtlichen. Denn TKMap wird geplant in Lite (kostenlos) und Professional (kostenpflichtig)
erhältlich sein. 2-tere soll Pluginfähig sein.
Mich würde halt dann interessieren ob du was dafür verlangst, und wenn was. Ein Eintrag im About-Dialog ist dabei, sowie die DLL wird nicht
einkompiliert.


MfG
R

Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

54

Sonntag, 21. Februar 2010, 01:12

Hi.
Bist du der, der mir eine E-Mail geschrieben hat? Wenn ja, sorry, aber irgendwie kann ich keine Mails über Outlook senden ^^
Also ich habe kein Problem damit, kannst du gerne machen ;)

Schaffen tut die PluginLib das problemlos. Ich würde eine Funktion in die Plugins implementieren, die einfach die komplette Form als Referenz annimmt. So kann die DLL praktisch machen, was sie will (falls das nicht gewünscht ist, kann man ja auch einfach nur z.B. die Menüleiste als Referenz übergeben). Mal ein ungetestetes Beispiel, welches eher Pseudo- als funktionierender Code ist.

 Hier klicken für weitere Informationen

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
Public Function ApplyInterfaceChanges(ByReference pForm As Form) As Boolean
	' Beispiel: Rückgabe "True" wenn die DLL was verändert, sonst "False"
	' Alle Controls durchlaufen und nach dem Control mit dem Namen "MenuObject" suchen
	For Each pControl In pForm.Controls
		' Ist das gesuchte Control unser Hauptmenü?
		If pControl.ToString().Contains("MenuObject") Then
			' Von "Object" zu "MenuStrip" casten, um es richtig verwenden zu können
			Dim menuObject As MenuStrip = DirectCast(pControl, MenuStrip)
			
			' Neuen Eintrag erstellen
			Dim myEntry As ToolStripItem = New ToolStripItem()
			myEntry.Text = "Testeintrag"
			
			' Dem Hauptmenü hinzufügen
			menuObject.Items.Add(myEntry)
			
			' Da gefunden wurde, beenden und "True" zurückgeben
			Return True
		End If
	Next
	
	' Kein Hauptmenü, also "False"
	Return False
End Function


Mit den entsprechenden Funktionen der PluginLib rufst du diese Funktion in den DLLs dann an einem geeignetem Punkt (z.B. im Load-Event der Form) auf. Da du eine Referenz verwendet, musst du in deinem Programm nichts weiter machen.

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

Razer

Registrierter Benutzer

  • »Razer« ist männlich

Beiträge: 88

Dabei seit: 1. Februar 2008

  • Private Nachricht senden

55

Sonntag, 21. Februar 2010, 01:30

Hey. Danke :)

Also, dann stehts fest: Die Lib ist mit von der Party.
Das erspart mir ein gutes Pluginsystem zu programmieren, da mir schon bei mehreren Versuchen irgendwas die Füße gelegt hat.

Außerdem hab ich genug mit den Core-Features zu tun ...


Also, wie ich das mit der GUI mach, werd ich dann sehen ;) Danke aber für das Beispiel.


Das mit dem Laden der Plugins hab ich bereits gemeistert. Ich stelle vor den "(Splash)Loader" von TKMap. Frisches Design und sehr funktional.
(Das in der Mitte hat noch einen zu scharfen Übergang. Da muss ich mir noch was überlegen ;))


Jedes Plugin kann da einen LoadingStep eintragen. Die Gruppe (Liste) ruft dann über das Interface die Funktion Load() auf und das Plugin
lädt sich dann selbst.

PS: Nein ich hab dir keine E-Mail geschickt ;) War wohl wer anders ;)

MfG
R

Chrisber

Super Moderator

  • »Chrisber« ist der Autor dieses Themas

Beiträge: 634

Dabei seit: 28. Januar 2007

Hilfreich-Bewertungen: 244

  • Private Nachricht senden

56

Sonntag, 21. Februar 2010, 01:34

Gute Idee, so kann man viel individuellere Ladedetails anzeigen ^^
Ich habe zwar keine Ahnung, was du das codest, aber es sieht gut aus ;)

Viel Spaß ;P

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

Razer

Registrierter Benutzer

  • »Razer« ist männlich

Beiträge: 88

Dabei seit: 1. Februar 2008

  • Private Nachricht senden

57

Sonntag, 21. Februar 2010, 02:29

Joa bei TKMap geb ich mir extrem viel Mühe. Ich denke, das ist dann mein Lebenswerk im Bereich der Programmierung.

Nicht nur der Loader ist so aufgebaut, dass er flexibel ist.

Hierbei können Plugins einen LoadingStep hinzufügen. Dieser wird in der Group gespeichert und in dessen Liste eingetragen.
Sobald der Loader Die FUnktion "LoadAllSteps()" der Gruppe aufruft, werden diese nacheinander geladen. Der Fortschritt wird dabei auch angezeigt.

Ich hab mir für TKMap vorgenommen Funktion und Optik wirklich ohne Schweißnaht zusammenzufügen.
Dazu nutze ich einige Control-Libs welche Vista-API´s verwendet.

Somit fällt leider jegliche XP-Unterstützung weg. Aber bis es TKMap gibt ist XP wirklich ein altes Eisen,
und irgendwann muss man anfangen in die Zukunft zu denken.

MfG
R

r3mote

Tekker Deluxe ♥

  • »r3mote« ist männlich

Beiträge: 150

Dabei seit: 14. Januar 2010

Wohnort: Lübeck

Frühere Benutzernamen: r3mote

Hilfreich-Bewertungen: 48

  • Private Nachricht senden

58

Sonntag, 21. März 2010, 17:57

Ich hätte gerne mal einen aktuellen Download Link.. ;)


EDIT:
Sry.. Mein UMTS hat mal wieder gesuckt -.-'

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »r3mote« (21. März 2010, 18:02)


Tsuyo

Registrierter Benutzer

Beiträge: 804

Dabei seit: 10. Oktober 2009

Wohnort: k

Frühere Benutzernamen: m0nst3rkill3r

Hilfreich-Bewertungen: 257

  • Private Nachricht senden

59

Dienstag, 25. Mai 2010, 16:37

Hi, wie kann ich rausfinden was für funktionen in der Dll sind?
Ich hab das ausprobiert:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
        Dim Manager As New PluginLib.PluginLib("$plugin", "PluginLibTest")
        Manager.AddVariable("PluginName")
        Manager.AddVariableOptional("Version", "1.0.0.0")
        Manager.LoadPlugins("C:\Users\Chef\Documents\Visual Studio 2010\Projects\pluginlibuse\pluginlibuse\bin\Debug\Plugin\", IO.SearchOption.TopDirectoryOnly)
        For Each Plugin As KeyValuePair(Of String, PluginLib.Plugin) In Manager.GetPlugins()
            Dim X As Dictionary(Of String, PluginLib.MethodData) = Plugin.Value.GetMethods()
            For Each Y As Collections.Generic.KeyValuePair(Of String, PluginLib.MethodData) In X
                RichTextBox1.Text += Y.Key
            Next
        Next


Jedoch wird nichts in der Textbox angezeigt. Wieso?

/edit:
Wenn ich z.b in der ersten schleife das mache:
Plugin.Value.GetMethod("TestMethode").Invoke.ToString()

gibt er mir die "PluginLib.MethodNotFoundException" Exception

Zitat von »"http://forums.macrumors.com/showpost.php?s=9e0078570b2b62fd044cc1b13d212b09&p=4777525&postcount=1064"«

When talking about how apple cannot influence the future of computers, you also forgot to mention that the internet was created on a network of macs to start with. Thats why every online PeeCee has a MAC code. Even my PSP needs a MAC code to get online....
~2000€ für nen brauchbaren Mac sind imho 2100€ zu viel. - SamusTyp

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tsuyo« (25. Mai 2010, 16:50)


singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

60

Dienstag, 25. Mai 2010, 18:44

Du musst die Methode auch vorher in der PluginLib festlegen, das ist nach meiner Meinung nicht so gut, weil dann die PluginLib nicht dynamisch ist
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


Social Bookmarks