Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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 ;)

Geschrieben

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?

Geschrieben

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.

Geschrieben

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... :(

Geschrieben
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 :(
Geschrieben

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...

Geschrieben

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? :D

Goos

Geschrieben

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 :rolleyes:

Geschrieben
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.

Geschrieben

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 :rolleyes: ), dann ist das eine feine Sache!

Geschrieben

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?

Geschrieben
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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...