DLLs



  • Ich bin noch nicht so lange beim Programmieren dabei.
    Jetzt habe ich die Grundlagen und eine paar weiterführende Sachen drauf.
    Und dann bin ich über ein paar dlls gestolpert.
    Also mal schnell ein wenig gegoogelt und tasächlich: Sowas kann ich auch mit vc++ machen.
    Aber jetzt wirs schwer für mich:
    Was genau ist der Vorteil einer DLL?
    Wie benutze ich eine DLL in einem meiner Projekte?
    Hat das ganze auch Nachteile?
    Und natürlich: Wie mache ich mir jetzt soetwas selber und worrauf muss ich achten?

    Habe da irgendwas gelesen mit dllmain und einzeln kompilieren, aber so ganz blicke ichs noch nicht.
    Kann mir einer auf meine oben gennanten Fragen antworten? Oder hat en gutes tut zu Hand?
    Vielen Dank!



  • Der Vorteil einer Dll ist, dass code ausgelagert wird. Deine Exe wird kleiner, wenn du beispielsweise eine Dll (dynamische Funktionsbibliothek) verwendest.
    Das macht vor allem dann Sinn, wenn du große Anwendungen schreibst, und deine Klassen- und Funktionssammlung eine bestimmten Umfang erreicht haben. Es kann

    nämlich vorkommen, dass du bestimmte Funktionen gar nicht brauchst, und dafür gibt es dlls, man kann die Klassen/Funktionen dann thematisch gliedern, und in verschiedene DLLs auslagern. Wenn eine Funktion aus einer Dll gebraucht wird, erkennt das Programm dies, und macht das automatisch. Früher bei statischen Bibliotheken (*.lib) wurde die gesammte Bibliothek beim Programmstart eingeladen, und es konnte vorkommen, dass diese dann mehrmals im Speicher dahindümpelte. Eine DLL wird nur einmal geladen.

    Sollte ich was verdreht haben, korrigiert mich bitte.
    Weiterführend: http://de.wikipedia.org/wiki/Dynamic_Link_Library
    Auch über Nachteile ->"DLL-Hell" usw. steht da was.

    Zum Einbinden der DLL kann ich erst was sagen, wenn du mir sagst, welche IDE und welches OS du verwendest. Im Prinzip läuft es überall gleich ab, aber praktisch sind dann doch Unterschiede 😉



  • Gut 🙂 Dann sind mir die Vorteile schonmal klar! Jetzt fehlt mir noch die Frage:
    Wie mache ich mir sowas?
    und
    Wie binde ich es ein?

    Ich benutze Visual C++ 2008 Express Edition[Da geht warscheinlich wieder nicht oder?-.-] und Windows Vista Home Premium 32 Bit



  • Gut 🙂 Dann sind mir die Vorteile schonmal klar! Jetzt fehlt mir noch die Frage:
    Wie mache ich mir sowas?
    und
    Wie binde ich es ein?

    Ich benutze Visual C++ 2008 Express Edition[Da geht warscheinlich wieder nicht oder?-.-] und Windows Vista Home Premium 32 Bit

    Edit:
    Und wo mir gerade noch einfällt. Wenn ich mit dlls arbeite, dann kann ich ja nichtmehr statisch gegen die c-runtime linken oder? Dann muss ich also immer die
    redistributable auf dem Ziel-PC installiert haben oder?

    Danke


  • Mod

    1. Es geht auch mit der Express Version.
    2. Du musst nur dann die CRT als DLL benutzen, wenn Du über DLL Grenzen hinweg Speicherblöcke allokieren und freigeben willst. Oder willst auch noch Objekte wie std::string oder andere std::container aus der DLL zurückgeben!
    In diesem Fall musst Du sogar zwingend die selbe Compiler-Verision und STL Lib/MFC verwenden!

    Wenn man ein plain interface mit PODs baut, kann man die DLL wahlfrei so bauen wie es einem passt! Man kann die CRT benutzen die man möchte und der Aufrufende kann auch machen was er will. Die Objekte werden dann nur in der DLL allokiert und freigegeben. Kommuniziert wird mit den Objekten COM-like über Interfaces.
    So würde ich es immer anstreben. Nicht anders arbeitet ja Windows mit den Common-Dialogen und Standard-Fensterklassen.



  • aha xD
    Das macht mir aber imernoch nciht klar, wie genau ich mir jetzt eine dll amche und benutze!


  • Mod

    Dafür gibt es IMHO Wizards...



  • Wie bereits erwähnt ist das Thema Neuland für mich...
    Also viellecih tkönnte man doch ein gaaaanz klein wenig detaillierter sein? xD

    Danke


  • Mod

    Frage001122 schrieb:

    Wie bereits erwähnt ist das Thema Neuland für mich...
    Also viellecih tkönnte man doch ein gaaaanz klein wenig detaillierter sein? xD

    Neues Projekt -> Win 32 -> DLL!



  • Gut und was schreibe ich dann da in die Datei rein?
    Sowas wie
    alle funktionen auf einen Haufen wohl eher nciht oder?



  • Wenn DU so eine Frage stellt dann sollte Du mal mit den Grundlagen der Softwareentwicklung anfangen.
    Wie schreibst Du ein Programm?
    Da machst DU auch Klassen und Funktionieren.
    Genauso in einer DLL.
    Das Programm greift dann auf die Klassen und Funktionen der DLL zu wenn du es angibst.
    Übrigens braucht man DLL auch um ein Pluginsystem zu erstellen.


Log in to reply