Filou Geschrieben 10. April 2006 Geschrieben 10. April 2006 Hallo! Ich habe mal eine allgemeine Frage zu DLLs. Ich weiß was DLLs heißt. Aber nicht wozu man sie benutzt oder gar wie man sie in C++ erstellt und einbindet. Also ich denke mal es ist sinnvoll einzelne Programmfunktionen in DLL Dateien auszulagern, oder? So dass die eigentliche EXE Anwendung nicht 10 MB groß ist. Mein Programm besteht im Moment aus ettlichen Dialogen und ist 6,3 MB groß. Ist es da sinnvoll einzelne Funktionen in DLLs auszulagern? Wie macht man das? Ist es schwer und ist es sinnvoll? Oder meint ihr es ist besser alles in einer Anwenung zu haben? Ich habe bisher noch nie ein so umfangreiches Programm gemacht dass es nötig wäre darüber nachzudenken. Liebe Grüße, Filou Zitieren
Guybrush Threepwood Geschrieben 10. April 2006 Geschrieben 10. April 2006 Naja in erster Linie steckt man Sachen in eine DLL um sie Möglichst wiederverwenden zu können oder damit andere sie verwenden können. Außerdem hat das den Vorteil das du wenn du eine Funktion änderst z.B. für einen Bugfix und diese in einer DLL steckt dann musst du nur die DLL austauschen anstatt das gesammte Programm. Was natürlich nicht heißen soll das du für jede Funktion eine eigene DLL machen sollst Zitieren
Filou Geschrieben 10. April 2006 Autor Geschrieben 10. April 2006 Aber ich könnte ja auch einfach z.B. meine Scannen Funktion in ein Extra Projekt legen und das dann von dem Hauptprogramm per ShellExecute aufrufen lassen. Ist wohl aber nicht so professionell. Aber das mit dem Austauschen der Funktionen hört sich sinvoll an. Wie öffnet man DLLs in seinem projekt? Ist das so einfach wie mit #include? Zitieren
Klotzkopp Geschrieben 10. April 2006 Geschrieben 10. April 2006 DLLs benutzt man nicht, weil das Programm zu groß ist. Es ist richtig, dass durch die Benutzung von DLLs das Hauptprogramm kleiner wird, aber das ist nicht der Hauptgrund, warum man das tut. DLLs benutzt man, weil sie Schnittstellen bieten und austauschbar sind. Sie vermeiden Redundanz, wenn sie Funktionen beinhalten, die mehr als ein Programm benötigt. Wenn dein Programm nicht von Anfang darauf hin entworfen wurde, kann es schwierig werden, Funktionen in DLLs auszulagern, es sei denn, du hast beim Design gut auf saubere Schnittstellen geachtet. DLLs kann man entweder über Load Time Dynamic Linking einbinden - dazu brauchst du eine Importbibliothek - oder mittels Run Time Dynamic Linking (LoadLibrary, GetProcAddress). Bei Load Time Dynamic Linking startet dein Programm gar nicht erst, wenn die DLL nicht da ist. Bei Run Time Dynamic Linking kannst du darauf zur Laufzeit reagieren. Zitieren
Filou Geschrieben 10. April 2006 Autor Geschrieben 10. April 2006 Haha... Natürlich habe ich von Anfang an nicht daran gedacht. Und dann kam noch dazu dass mein Programm zu anfang nur recht wenig konnte. Und woche für Woche hat man gesagt dass muss noch dies können und jenes und so ist es gewachsen bevor ich fertig war... Zitieren
Klotzkopp Geschrieben 10. April 2006 Geschrieben 10. April 2006 Und woche für Woche hat man gesagt dass muss noch dies können und jenes und so ist es gewachsen bevor ich fertig war... Das kenne ich. Nichts macht das Design so sehr kaputt wie nachträglich eingebaute Features Zitieren
TDM Geschrieben 10. April 2006 Geschrieben 10. April 2006 Vorteil an DLLs ist auch dass sie einen internen Zähler besitzen Sobald ein Programm die DLL benutzt, wird dieser erhöht. Benutzt es die nicht mehr, wird der verringert. Bei 0 kannst du dann deine DLL ohne größere Schwierigkeiten löschen. Weiterer Vorteil ist auch, dass du DLLs in einer Debug und einer Releaseversion erstellen kannst (gut... kann man bei jedem Projekt), dann kannst du auf die Debugversion beim Programmieren noch zugreifen und die funktionen durchlaufen. So hab ichs jedenfalls bei ner Engine für ein Spiel gemacht... Zitieren
Goos Geschrieben 10. April 2006 Geschrieben 10. April 2006 Bei 0 kannst du dann deine DLL ohne größere Schwierigkeiten löschen. Na ob das fuer den naechsten Programmstart so gut ist, wenn ich bei nem Reference Count von 0 gleich meine DLL loesche? Goos Zitieren
Guybrush Threepwood Geschrieben 10. April 2006 Geschrieben 10. April 2006 Kommt auf die DLL drauf an obs ohne nicht vielleicht besser ist Zitieren
Goos Geschrieben 10. April 2006 Geschrieben 10. April 2006 DLL = Das Loescht du Lieber ??? Ok sorry, werd nicht weiter rumbloedeln Goos Zitieren
TDM Geschrieben 10. April 2006 Geschrieben 10. April 2006 ja ne... ich meinte dass er die dann löschen kann ohne eine Programmabhängigkeit zu beeinflussen allerdings... ist dann eh nur noch unnötiger speicherplatzverbrauch Zitieren
Bubble Geschrieben 10. April 2006 Geschrieben 10. April 2006 z.B. für einen Bugfix und diese in einer DLL steckt dann musst du nur die DLL austauschen anstatt das gesammte Programm. Man kann (und tut es auch) einfach die Programmdatei patchen, DLLs bringen für Updates keinen besonderen Vorteil, den man sonst nicht auch haben könnte. Zitieren
Pointerman Geschrieben 11. April 2006 Geschrieben 11. April 2006 Moin! Ich habe DLLs benutzt, um anderen Programmierern die Möglichkeit zu geben mein Programm um neue Funktionen zu erweitern, ohne ihnen Zugriff auf meinen Quellcode geben zu müssen und ohne das sie sich erst groß mit meinem Code beschäftigen müssen (für beide Seiten sehr vorteilhaft). Die neuen Funktionen (also die DLLs) wurden beim Programmstart erkannt und in das Menü des Programms eingebunden. Natürlich muss man eine Schnittstelle vorgeben, auf die die andere Programmierer zugreifen können, aber wenn die erstmal steht und gut dokumentiert ist (wahrscheinlich das schwerste ), dann ist das eine feine Sache! Zitieren
Jonsc1 Geschrieben 15. April 2006 Geschrieben 15. April 2006 War der ursprüngliche Gedanke nicht mal das bestimmte Funktionen etc. von allen Programmen benutzt werden können und somit Speicher gespart wird weil nicht alles x - mal geladen wird? Zitieren
Goos Geschrieben 18. April 2006 Geschrieben 18. April 2006 War der ursprüngliche Gedanke nicht mal das bestimmte Funktionen etc. von allen Programmen benutzt werden können und somit Speicher gespart wird weil nicht alles x - mal geladen wird? Urspruenglich schon, aber seit Win32 hat jeder Prozess seinen eigenen Adressraum und dort auch die entsprechende Dll fuer sich selbst. Wirklich geshared wird nur noch wenig. Die Speicherersparnis ist heute also kein wirklicher Grund mehr. Dafuer koennen heute gleichzeitig auch mehrere Versionen einer Dll benutzt werden. Das praktischste heute ist wohl wirklich die feste Schnittstelle und die dadurch bedingte Austauschbarkeit. Goos Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.