Ein netter User hatte die Idee ein PlugIn-System für Arengu einzuführen ( siehe: Kommentare von "Map-Editor: Halbzeit" ).
Die Idee von Plugins gab mir schon seit längerer Zeit ein kleines Rätsel hinsichtlich der Funktionsweise auf, weswegen ich mich ein bisschen näher damit beschäftigt habe und siehe da:
Ich habe nun ein Beispielcode für meine Idee von einem Mini-PlugIn-System hochgeladen.
Meine Vorgehensweise:
Für die DLL gebe ich einen Namespace, einen Klassennamen und einen Methodennamen vor, damit ich ( also das Spiel im Endeffekt ) weiß, was ich ausführen muss.
In eigener Sache:
Bitte schaut es euch an ( sind nur ein paar Zeilen ) und sagt, was ihr davon haltet und was man - mit Sicherheit - verbessern kann. Vielen Dank dafür schonmal.
Download ( 7z - 12,9 MB): arengu.square7.ch/Arengu/ExampleCodes/Reflection.7z
mfg
Hauke
Jo, kannst natürlich machen. Professioneller wärs aber auf diese Art:
AntwortenLöschenDu machst eine DLL mit einem Interface (ich gehe jetzt mal davon aus, du weißt, was das ist. Wenn nicht -> sowas wie ne abstrakte Klasse. (Projekt -> Hinzufügen -> Neues Element -> Schnittstelle))
und das Plugin muss wiederum die DLL mit dem Interface einbinden, und von diesem ableiten ...
Vorteile:
* Name beliebig
* Der Benutzer weiß ohne anleitung welche methoden er reinmachen muss (rechtsklick auf deine klasse -> schnittstele implementieren)
* Du kannst in deinem Code die Methode ganz normal aufrufen (ohne invoke ...)
Viel Glück ;)
Joa, ich hab dir mal sowas in der Art hochgeladen:
AntwortenLöschenhttp://www.file-upload.net/download-7763073/Plugin-bsp.zip.html
Hab verstanden, ein wenig komplizierter, aber geht schon ;)
LöschenAber du hast ja geschrieben, dass er eine Instanz der "erstbesten Klasse implementiert", das heißt doch, wenn ich zwei Klassen habe, kann es sein, dass er die implementiert, die ich nicht als Instanz haben möchte ( sofern das der Fall sein sollte ) oder?
Ähnliche Frage: Gibts es eine Regel nach der eine Klasse die "erst"beste ist?
mfg
Hauke
Wenn man so blöd ist, dass man zwei Klassen erstellt, die BEIDE das IPlugin-Interface implementieren, ist man selber schuld :D. Die "erstbeste" ist in dem Fall die, die von Assembly.GetTypes() als erste gefunden wird ... denn sie steht am Anfang der List und .First() nimmt einfach nur den ersten (und hoffentlich einzigen) Eintrag aus der Liste
LöschenGut^^ nur für denn Fall ;)
LöschenAuf jedenfall bedanke ich mich schonmal für die Tipps und lehrreichen Informationen, die ich mit Hohe wahrscheinlichkeit verwenden werde :)
Any Progress?
AntwortenLöschen? Was genau meinst du?
LöschenDll´s....ich binn raus xD
AntwortenLöschenhab noch nie ne Dll gemacht und habs eig nicht vor...
Woah neues Design
AntwortenLöschenJup, hab mir mal ein neues Aussehen gegönnt ;)
LöschenDas YT vid ist auf privat, das kann keiner sehen
AntwortenLöschenOhhh, sry, habs geändert ;)
Löschen