Laden...

DLL Import mit Pfadangabe möglich

Erstellt von Riv3r vor 16 Jahren Letzter Beitrag vor 16 Jahren 9.434 Views
R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren
DLL Import mit Pfadangabe möglich

Hallo,

Ich habe verschiedene DLLs die auf einem Server liegen und in ein Programm geladen werden (die DLLs sind über "Verweise" in VS2005 eingefügt).

Ich kann die Methoden usw. auch super aufrufen...

Nur jetzt meine Frage:

Kann ich die DLLs irgendwie anders einbinden - mit Pfadangabe?

Das Problem ist dass sich die Pfadangabe während der laufzeit ändern lassen sollte...
Oder zumindest beim Start des Programms den Pfad aus eine z.b. *.ini auslesen...

Danke schonmal

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Riv3r,

da DllImport ein Attribut ist, vermute ich , dass es nur per CodeDom geht.

herbivore

R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

Das heißt???

Was ich damit erreichen will ist dass die DLLs bei einem Servercrash gleich wieder gefunden werden (es müsste in der ini eben statt "\Server1\asd.dll" \Server2\asd.dll" eingetragen werde)...

Gibt es eine Möglichkeit die DLLs "suchen zu lassen" oder müssen die immer im ProgVerzeichnis oder WIN liegen?

1.985 Beiträge seit 2004
vor 16 Jahren

Hallo Riv3r,

Du kannst nur das CurrentDirectory umstellen und die Dateien dann mit DllImport einbinden. Eine andere Möglichkeit, außer CodeDom, fällt mir auch nicht ein.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Riv3r,

Das heißt???

Wie bei quasi allen Stichworten, heißt das [Hinweis] Bitte schau in die SDK-/MSDN-Doku

herbivore

M
1.439 Beiträge seit 2005
vor 16 Jahren

Eine Möglichkeit wäre über die WinApi mittels LoadLibrary die Dlls zu verwenden. Ich würde aber eher zur Lösung von Fabian tendieren...

R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

ok...

also wenn ich CurrentDirectory aus der ini herraus fülle und dann mit DLLImport die DLL lade sollte es gehen - werd ich gleich versuchen...

Noch eine Frage:
Kann ich die Methode/Eigenschaften genau so aufrufen wie wenn die DLL über Verweise eingebunden wäre?

@herbivore

Ja 😉 hab schon nachgesehen

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Riv3r,

Kann ich die Methode/Eigenschaften genau so aufrufen wie wenn die DLL über Verweise eingebunden wäre?

wenn es eine nicht-.NET-Dll ist nur, wenn du DllImport verwendest.

herbivore

R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

Die DLLs sind in C# geschrieben (sind UserControls) - und bisher über Verweise hinzugefügt...

Also sollte zwischen dem DLLImport und den per Verweis hinzugefügten DLLs kein unterschied sein (auch nicht in der Entwicklungsumgebung - bezüglich z.b. Intelisens...)?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Riv3r,

wenn die DLLs in .NET geschrieben sind, ist DllImport das falsche. Dann musst du Assembly.LoadFrom verwenden und darfst vorher keine Referenzen hinzufügen. Das Aufrufen der Methoden geht dann nur über Reflection.

herbivore

R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

Öhmm ok...

Muss mich erstmal einlesen - mit Reflections hab ich noch nie was gemacht...

Danke schonmal

347 Beiträge seit 2006
vor 16 Jahren

Original von Fabian
Du kannst nur das CurrentDirectory umstellen und die Dateien dann mit DllImport einbinden. Eine andere Möglichkeit, außer CodeDom, fällt mir auch nicht ein. Benutzt du nicht eine Bibliothek, die ich dir gebastelt habe mit der man dynamisch DLLs laden und entladen kann? 🤔
Ganz zu schweigen davon, dass CodeDOM dafür da ist um Source code zu erzeugen oder Source code zu kompilieren. Und zwar im Sinne von einer IDE, oder Scripting durch den User.
CodeDOM zu missbrauchen um dynamisch IL zu erzeugen ist doch total krank, dafür gibt es Reflection.Emit.
Für's einfach Laden geht auch das hier

Marshal.GetDelegateForFunctionPointer
R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

Original von Robert G
Benutzt du nicht eine Bibliothek, die ich dir gebastelt habe mit der man dynamisch DLLs laden und entladen kann?

Für's einfach Laden geht auch das hier

Marshal.GetDelegateForFunctionPointer  

Du hast ne Lib geschrieben mit der man das realisieren kann? - kann man die bekommen?

Werd die DLLs warscheinlich einfach als Verweise hinzufügen und dann immer mit weitergeben anstatt vom Server zu laden - die Möglichkeiten hier sind zu aufwendig für jemanden der nochnicht lange progt...

Danke trotzdem...