-
04. 06. 2008, 15:50 #1
[VB .NET] .DLL oder .VB dynamisch einbinden
Hallo,
Ich suche eine Möglichkeit eine mit VB .NET erstellte DLL oder .VB-Datei mit VB 2008 in ein Projekt einzubinden. Der Name der Datei ist aber noch nicht bekannt und wird erst zur Laufzeit ermittelt. Ich habe bei beiden schon ewig gegoogelt und aber nichts außer Beispiele, die nicht wirklich funktionieren gefunden.
- Ich hab zwar einige Beispiele über System.Reflection gefunden, aber ich kann die DLL damit nicht einbinden, weil MS VB sie für "eine nicht gültige Assembly-Datei" hält.
- Mit System.CodeDOM scheint es auch nicht zu klappen, einen Quellcode zu kompilieren, da VB eine DLL mit kryptischen Namen sucht und natürlich nicht findet. Kann mir jemand helfen?
Vielen Dank schonmal im voraus fürs Antworten
g.
-
04. 06. 2008, 15:56 #2
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
würde mich auch interessieren
hast du einstiegspunkte in der dll??? wenn ja wie haste die gemacht??
-
04. 06. 2008, 16:11 #3
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
Was meinst du mit "Einstiegspunkten"? Ich kann dir da nicht richtig folgen.
-
04. 06. 2008, 16:21 #4
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
einstiegspunkte in einer dll sind punkte an dem das programm einsteigt
aber deine frage ansich mit dem einbinden interessiert mich auch
-
04. 06. 2008, 16:30 #5
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
>einstiegspunkte in einer dll sind punkte an dem das programm einsteigt
beste Definition ever und auch noch falsch
da ich es selbst nicht besser wusste hier mal eine Definition von msdn
A DLL can optionally specify an entry-point function. If present, the system calls the entry-point function whenever a process or thread loads or unloads the DLL. It can be used to perform simple initialization and cleanup tasks.
-
04. 06. 2008, 16:44 #6
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
mit dem problem habe ich mich auch auseinander gesetzt. hier habe ich vielleicht einen hilfreichen link http://www.tutorials.de/forum/net-tu...sch-laden.html
angehängt habe ich ein programm mit source, welches ich geschrieben habe, um dieses dynmaische laden einer dll zu üben. außerdem ist es recht hilfreich, um die klassen und methoden einer dll zu ermittlen. (die namenlosen buttons in der reihenfolge von links nach rechts drücken, nachdem ein eintrag ausgewählt wurde.) als beispiel liegen im debug ordner bereits 2 dlls, die eingelesen werden können.
um andere dlls einzulesen einfach in den ordner der anwendung schmeißen.
gruß
-
04. 06. 2008, 17:14 #7
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
Danke für den Tipp. Den Link hab ich auch bei Google gefunden, hat bei mir aber komischerweise nicht funktioniert. Es kibt nur noch ein Problem bei der Sache: In der Listbox sind bei auswählen einer DLL sehr viele Klassen sichtbar, benötigt wird von mir aber nur die eigentliche "Hauptklasse" (bei dir SMSGott.SMSGott). Wie lässt sich die automatisch auswählen?
-
04. 06. 2008, 17:23 #8
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
indem du diese explizit angibst, siehe quelltext, da wird der name aus der listbox genommen
-
04. 06. 2008, 17:27 #9
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
OK, soweit so gut. Nun liegt das problem aber dabei, dass ich den Namen dieser Klasse nicht kenne, man müsste sie also aus der DLL herausfinden.
-
04. 06. 2008, 17:55 #10
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
disassembling?? oder existiert sowas dann nimmer. wenn du mir die dll schickst kann ich siemal durch IDA jagen
EDIT:kannst du mir mal bitte auch den source code von der SMS GOTT dll schicken?
-
04. 06. 2008, 18:08 #11
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
mein programm veranschaulicht doch wunderbar, wie man zur laufzwit nicht nur den namen sondern auch die klassen UND methoden der klassenbibliothek herausfinden kann. du musst eben einen algorithmus entwickeln um zur laufzeit den klassennamen herauszufinden (aus dem namensarray, das von der dll zurückgegeben wird)
ein beispiel ist eben eine auflistung und auswahl der klasse.
sonst bleibt zu sagen, dass es sinnvoll wäre bei deinen bibliotheken (falls du zugriff darauf hast) einheitliche klassennamen zu verwenden. dadurch kannst du auf jede dll mit dem selben klassennamen gleich zugreifen.
ich habe den source der dll mal angehängt. nicht besonderes, ne public klasse und public methoden.
-
04. 06. 2008, 18:17 #12
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
AHH danke!!!
also meine functionen in einer dll müssen public functions sein.gut und schön, kann auch in meiner eigenen dll alle dinge anzeigen lassen. aber wie kann ich nu die funktionen aufrufen? oder bin ich einfach zu dum und hab was übersehen?
warum funzt eigentlich button3 net?
aber soweit super THX
-
04. 06. 2008, 19:39 #13
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
ich weiß selber nicht mehr wozu button3 ist, kannst es ja im source rausfinden wenn du möchtest.
zum aufrufen
das aufrufen ist ein bisschen tricky und nicht wirklich ohne entsprechende kenntnisse rauszufinden.
das ist der vorgang um eine funktion aufzurufen:
Code:Assembly = Reflection.Assembly.LoadFile(Environment.CurrentDirectory & "meinebibliothek.dll") t = Assembly.GetType("Assemblyname.Class1") method = t.GetMethod("MeinePublicFunctionDieEinenStringLiefert") obj = Activator.CreateInstance(t) string1 = method.Invoke(obj, New Object() {txt1.Text, txt2.Text}) 'Hier wurden als zweites Argument ein Objectarray mit den Argumenten für die aufzurufende Methode (in richtiger Reihenfolge) übergeben
-
06. 06. 2008, 16:45 #14
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
Danke, funktioniert alles super. Aber gibt es eine Möglichkeit, dass die DLL auf eigenschaften (und Variablen und Methoden) der Klasse zugreift, die sie ausführt?
-
06. 06. 2008, 17:54 #15
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
nunja so direkt kann ich dir das wohl nicht sagen, dafür reicht wohl auch mein fachwissen nicht. allerdings kannst du ja alle möglichen sachen per argument direkt in die gestartete funktion "einschleusen", so wie es in meinem beispielcode auch mit den zwei textbox inhalten passiert.
-
07. 06. 2008, 09:56 #16
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
Ok, ich könnte es so machen, dass die Function eine spezielle Klasse zurückgibt, die beschreibt, was sie verändern möchte (was aber sehr kompliziert wäre, vor allem, wenn das Hauptprogramm viele Controls besitzt). Deswegen hatte ich auch die Idee, VB-Code einzubinden, der dann dirakt zugreifen kann.
grüssse
g.
-
07. 06. 2008, 11:02 #17Troubleshooter
- Registriert seit
- Aug 2004
- Beiträge
- 436
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
wenn du auf die dll's zugreifen willst dann geb ich dir das Stichwort P-Invoke oder auch P/invoke
und wenn du in die Methoden(Name, Parameter und Rückgabewerte) der DLL's gucken willst dann empfehle dich dir Dependency Walker oder PeId
Wenn du hingegen wissen willst was eine Methode macht dann musst du wenns keine VB.net oder C# DLL ist, disassemblen oder etwaige andere Techniken nutzen um daran zu kommen.
-
07. 06. 2008, 11:47 #18
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
Das zugreifen auf die DLL ist genauso wie den Rückgabewert einer Funktion zu ermitteln kein Problem mehr. Mein Problem liegt darin, dass die DLL Propertys der Form/Klasse, die eine Funktion/Prozedur der DLL ausführt, verändern können soll.
-
07. 06. 2008, 12:02 #19Troubleshooter
- Registriert seit
- Aug 2004
- Beiträge
- 436
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
du willst also funktionen in der dll verändern das sie etwas anderes macht?
steh total aufm schlauch xD
-
07. 06. 2008, 12:31 #20
Re: [VB .NET] .DLL oder .VB dynamisch einbinden
Nein, ich will, dass die DLL Eigenschafen von Controls/Forms im Hauptprogramm verändert.
-


Zitieren
mehr lesen...







"Wir können nichts dazu" -...
Gestern, 21:23 in gulli:news