Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Frage zu DLL Handling (https://www.delphipraxis.net/200998-frage-zu-dll-handling.html)

TK8782 14. Jun 2019 07:04

Frage zu DLL Handling
 
Hallo zusammen,

vorneweg....ich selbst bin kein Entwickler, habe aber täglich mit Entwicklern zu tun und wollte mir hier in diesem Forum auch mal Meinungen von anderen Entwicklern einholen.

Nun zu meiner Frage:

Wir entwickeln eine Anwendung mit Delphi 7, die auch verschiedene DLLs benutzt, die ebenfalls von uns entwickelt wurden.
Bisher ist es laut meinen Entwicklern bei der Verwendung der DLLs in unserem Programm noch nicht so, dass die DLLs aus einem von uns definierten Verzeichnis geladen werden, sondern Windows wohl die Reihenfolge der Verzeichnisse, in denen nach der DLL geschaut wird, festlegt.

Unsere Applikation (.exe) liegt auf einem Netzwerkshare. Ich persönlich denke dass es am sinnvollsten ist die von der Applikation verwendeten von uns entwickelten DLLs im selben Verzeichnis der Applikation abzulegen und im Sourcecode zu definieren, dass die DLLs ausschließlich aus diesem Verzeichnis geladen werden. Das muss doch möglich sein oder ist dem nicht so?

Mir wurde von unserer Entwicklung nur der Begriff "DLL-Hell" an den Kopf geworfen. Für mich bedeutet der Begriff, dass es ja mehrere Versionen identischer DLLs (gleicher Name) auf den Systemen geben kann und somit die Abhängigkeiten und Versionen der DLLs nicht mehr zur Applikation passen. Meiner Meinung nach kann man dem doch entgegenwirken wenn die aktuellste Version der DLLs immer im Verzeichnis der Applikation vorliegt und die DLL ausschließlich aus diesem Verzeichnis verwendet wird (unter der Voraussetzung, dass die DLL natürlich eine eigens entwickelte DLL ist, die nur von unserer Applikation verwendet wird). Oder täusche ich mich da?

Ich bin dankbar für jeden hilfreichen Input zu diesem Thema und würde mich über Eure Meinung zu diesem Thema freuen.

hsg 14. Jun 2019 07:42

AW: Frage zu DLL Handling
 
Moin,

du brauchst in der Exe nicht den Pfad zu den DLLs angeben, wenn sie im Ausführungsverzeichnis liegen, dort sucht Windows zu allerst. Wenn du es aber partout willst, kannst du bei den DLL-Funktionen den Pfad mit angeben.

Problematisch wird es, wenn die DLLs auch von anderen Programmen benutzt werden, denn dann arbeiten ggf. beide Applikationen mit unterschiedlichen DLL-Ständen und damit hast du die befürchtete DLL-Hell. Du mit dem deinigen Stand, die andere aber mit einem anderen und damit können beide Programme trotz gleicher Eingabe zu unterschiedlichen Ergebnissen führen.

Gruß

Schokohase 14. Jun 2019 08:19

AW: Frage zu DLL Handling
 
@hsg

Das ist nicht die DLL-Hell.

Das Problem hat man, wenn die DLLs an einer zentralen Stelle liegen und Programm A und Programm B die DLL C benötigen.

Jetzt gibt es ein Update für Programm B und dabei leider zwingend auch ein Update der DLL C. Beide Programme A/B verwenden jetzt diese neue DLL C. Toll. Aber was, wenn sich in der DLL einige Dinge grundlegend geändert haben?

Dann funktioniert Programm B ganz toll und Programm A funktioniert nicht mehr.

Die Lösung ist, die DLL C in das Anwendungsverzeichnis von Programm A und Programm B zu kopieren. Da macht es auch kein Problem mehr, wenn es unterschiedliche Versionen der DLL gibt. Aber ein shared Pool für die DLLs habe ich dann auch nicht mehr.

https://de.wikipedia.org/wiki/DLL-Konflikt

TK8782 14. Jun 2019 08:34

AW: Frage zu DLL Handling
 
Danke zunächst mal für die Antworten.

Ergänzend dazu habe ich noch eine weitere Frage.

Und zwar haben wir hier einen Emailclient, der auch eine eigene MAPI.dll ausliefert.
Können MAPI.dlls auch im Programmverzeichnis, also auf einem Netzwerkshare liegen oder müssen diese immer zwingend in einem lokalen Verzeichnis auf dem PC zur Verfügung stehen?

Ich gehe mal davon aus dass es auch hier reicht die DLL im Programmverzeichnis im Netzwerkshare abzulegen und dann in der Registry die ensprechenden Einträge zu hinterlgen, die auf den PFad der zu verwendenden MAPI.DLL zeigen.....oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz