Wieso braucht man um eine dll benutzen zu müssen eine lib ?
-
Aber warum binde ich dann noch die Headerdatei in das Programm ein da steht ja auch noch drin wie die Funktionen heißen? Da muesste die lib doch eigentlich doppelt gemoppelt sein??
-
nö, weil du ohne die header lauter compilerfehler bekommst. die lib wird erst beim linken eingebunden. beim compilen hat der rechner noch keine ahnung davon, wie die
aufgerufene funktion aussieht, aber er hat durch den header schonmal ahnung, das die funktion existiert...so, ich hoffe das stimmt so alles
-
Es gibt ja zwei Vorgänge: Compilieren und Linken. Zum compilieren werden die Header benötigt, dann hat man erstmal nur die obj-Dateien rumliegen und die lib interessiert noch nicht. Und erst beim linken wird die lib-Datei benötigt.
Warum man bei einer dll immer noch eine lib benötigt, habe ich mich schon immer gefragt und die Frage hier war also garnicht so dumm. Bin aber nie auf die Idee gekommen, hier die Frage zu stellen.
-
Ja klingt irgendwie logisch nochmal danke füer die Erklärungen :):)
-
Ich weiss ja nicht obs in dem Beitrag richtig rausgekommen ist. Aber, zur
Verwendung einer C-DLL benötigt man NICHT unbedingt eine LIB(OBJ)-Datei.mfg JJ
-
Jo, die Stichworte dazu heissen "statische" (mit lib) und "dynamische Bindung von DLLs" (ohne lib).
Bei der statischen linke ich gegen die lib.
Die EXE am Ende ist nicht ohne die DLL lauffähig. (Noch bevor Windows (als Beispiel) Code aus der EXE ausführt checkt es ob es die DLL gibt, ansonsten hagelt es 'ne "Die Anwendung benötigt XX.dll, die nicht gefunden wurde" oder so ähnlich...)
Für Fälle interessant, wo das Programm ohne DLL überhaupt keinen Sinn macht (z.B. ein 3D-Spiel, wo in der DLL die Engine steckt).Bei dynamischen lade ich im Quellcode mit "GetModuleHandle / GetProcAdress" (oder so ähnlich) die DLL nach.
Dort kann ich dann auch sauber auf eine nichtvorhandene DLL reagieren und z.B. anderen Code ausführen.
Für genanntes PlugIn-System z.B.
-
Sgt. Nukem schrieb:
Die EXE am Ende ist nicht ohne die DLL lauffähig. (Noch bevor Windows (als Beispiel) Code aus der EXE ausführt checkt es ob es die DLL gibt, ansonsten hagelt es 'ne "Die Anwendung benötigt XX.dll, die nicht gefunden wurde" oder so ähnlich...)
Für Fälle intDas mach Windows nur weil die DLL auch geladen wird um das Programm schneller auszuführen.
Es muss aber nicht so sein. Beim Kompilieren kann man angeben ob die DLL erst geladen werden soll wenn sie gebraucht wird oder gleich bei start.
-
Unix-Tom schrieb:
Sgt. Nukem schrieb:
Die EXE am Ende ist nicht ohne die DLL lauffähig. (Noch bevor Windows (als Beispiel) Code aus der EXE ausführt checkt es ob es die DLL gibt, ansonsten hagelt es 'ne "Die Anwendung benötigt XX.dll, die nicht gefunden wurde" oder so ähnlich...)
Für Fälle intDas mach Windows nur weil die DLL auch geladen wird um das Programm schneller auszuführen.
Es muss aber nicht so sein. Beim Kompilieren kann man angeben ob die DLL erst geladen werden soll wenn sie gebraucht wird oder gleich bei start.wo kann man das denn angeben? (vc++)
-
Beim kompilieren gibt es einen Parameter. Weiß ihn aber nicht auswendig. Steht in dem Buch für den Vc++ von MS Press.
-
Die Parameter heißen /DELAYLOAD oder /DELAY schau am besten mal in der msdn nach. Da bekommste genauere Infos.
-
cool danke
wieder ne neues dll feature gelernt
fast so gut wie mein letztes: dll aufrufe umleiten ohne den quellcode zu ändern