was sind dll's?
-
hallo leute,
ich hab mal so die triviale frage was eigendlich dll dateien sind
ich hab mal etwas im internet gesucht und bin zu folgendem ergebnis gekommen:
-eine dll datei ist eine datei wo kompilierter quellcode für funktionen (und klassen) drinsteht
-möchte man diesen nutzen importiert man die dll in sein programm und benutzt die funktion einfach (wie genau ist erstmal egal)statische bibliotheken sind dateien (*.lib) die kompilierten quellcode enthalten und die beim compilen bzw linken dem eigenen programm hinzugefügt werden
dll -> der quell code muss nur einmal geladen werden
static -> der code wird in das eigene programm mit rein gepacktstimmt das so?
vor und nachteile sind erstmal egal, die kann man sich ja auch selber ausdenken...
-
ja, passt so
-
Skym0sh0 schrieb:
dll -> der quell code muss nur einmal geladen werden
jein, dlls sind kein quellcode, sondern bereits compiliertes zeug. aber dlls können nicht nur code, sondern auch bilder, texte, usw. enthalten
Skym0sh0 schrieb:
static -> der code wird in das eigene programm mit rein gepackt
ja, statische libs werden fest mit der exe verschmolzen, während dlls beim starten des programms nachgeladen werden.
-
ja ok aber hab oben ja geschrieben das es schon compiled is
und wie man das ganze programmiert das gehört jetzt in die c++ ecke?
-
Skym0sh0 schrieb:
und wie man das ganze programmiert das gehört jetzt in die c++ ecke?
eher nach winapi oder sowas.
-
dll = dynamic link library (frei übersetzt: dynamisch gebundene bibliothek)
der wesentliche punkt ist, dass eine dll erst zur laufzeit geladen wird, im gegensatz zu einer bibliothek (lib), die fest in der .exe eingearbeitet wird beim compilieren.
der sinn einer dll ist zum beispiel, ein programm in seine module zu zerstückeln und dann im patchfall nur die dll austauschen zu müssen, wohingegen bei der lib das ganze programm neucompiliert werden muss und eine neue exe erzeugt wird.
auch können mehrere programme gleichzeitig dieselbe dll benutzen, was speicher und ladezeit spart.
andererseits ist es langsamer, für ein einzelnes programm eine dll zu laden, weil ein extra festplattenzugriff erfolgen muss.
-
jule37 schrieb:
der sinn einer dll ist zum beispiel, ein programm in seine module zu zerstückeln und dann im patchfall nur die dll austauschen zu müssen, wohingegen bei der lib das ganze programm neucompiliert werden muss und eine neue exe erzeugt wird.
auch können mehrere programme gleichzeitig dieselbe dll benutzen, was speicher und ladezeit spart.ja schon, aber das birgt auch viele fallstricke. windosen-codern dürfte die 'dll hell' ein begriff sein.
-
~fricky schrieb:
ja schon, aber das birgt auch viele fallstricke. windosen-codern dürfte die 'dll hell' ein begriff sein.
mit sicherheit
sollte nur den unterschied zwischen dll und lib verdeutlichen
-
jule37 schrieb:
der sinn einer dll ist zum beispiel, ein programm in seine module zu zerstückeln und dann im patchfall nur die dll austauschen zu müssen, wohingegen bei der lib das ganze programm neucompiliert werden muss und eine neue exe erzeugt wird.
ich glaube nicht, dass das der Grund ist, warum man dynamsiche Bibliotheken entwickelt hat sondern dein zweiter genannter Grund; zudem ist der DLL-Hell ein fast fester Begrif/Bestand unter Windows.
-
Eine Lib wird nicht zu einer EXE kompiliert. Eine Lib ist nicht die statische DLL.
Eien LIB beinhaltet nur die Funktionsprototypen der DLL.
Dadurch ist es möglich eine DLL wir eine statische Bibliothek einzubinden. Man muss sich um nichts kümmern außer die Header und die LIB zu linken.
eine DLL mit LIB braucht die DLL immer noch.
Eine DLL wird in diesem Fall immer beim Programmstart geladen.
Mann kann aber die DLL auch Dynamisch laden. Dafür braucht es keine Lib.
Dabei wird die DLL erst geladen wenn man es möchte.
Eine DLL wird von mehereren Programmen nur dann gemeinsam verwendet wenn die gleich DLL-Datei angesprochen wird.Man hat 2 Programm in unterschiedlichen Programmordnern.
Beide verwenden die Funktionen aus der DLL.
Die DLL-Datei befindet sich in dem jeweiligen Programmordner.
Hier wird die DLL 2 Mal in den Speicher geladen und besteht auch 2 Mal dort.
Also nichts mit Speicherersparnis.
-
und wie man das ganze programmiert das gehört jetzt in die c++ ecke?
eher nach winapi oder sowas.http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api6.htm
(Tutorial wurde für MS VisualC++ 6 geschrieben, Grundzüge sind aber allgemeingültig)
-
jop den link hatte ich in der winapi faq gefunden und mal reingeguckt
thx