2016-07-27 25 views
0

Als ich meine Entwicklungsumgebung für (SDLSimple DirectMediaLayer) einrichten wollte, lud ich das von der Website bereitgestellte Paket herunter, von der readme.txt Datei, die ich fand, dass ich beides brauche .lib und .dll ...Warum einige Programme sowohl .lib als auch .dll benötigen ...

Meine Frage ist:

  1. ich bin nicht sicher, ob mein Verständnis korrekt ist: in meinem Denken, .lib für windows wie .a für linux ist, ist statische Bibliothek und .dll für windows ist wie .so für linux, ist shared library, ist das korrekt?
  2. Wenn die obige Idee richtig ist, ich denke, wir können nur .lib oder .dll verwenden, da die Arbeit, die sie tun, die gleiche ist? Warum also die beiden in einem Programm?
  3. Und ich verstehe nicht ganz .dll verstehen, wenn mein Gedächtnis Server ich richtig, die einen des Vorteils für shared library ist, kann sie aktualisiert werden, während das Problem läuft, so wie können die Menschen dies tun, wenn wir die .dll-Datei aktualisieren, Wie kann ein laufendes Programm die Änderungen der .dll kennenlernen und in den Speicher neu laden?

Antwort

1

In VC gibt es zwei Arten von Bibliotheken.

Erster Typ ist eine "echte Bibliothek", generiert von der "static library project", die alles enthält, was Sie verknüpfen und ausführen können, ohne dll.

Der zweite Typ ist "Import-Bibliothek", generiert von dem "DLL-Projekt", das nur die Symbole enthält, die Link.exe benötigt. Sie können auf die Bibliothek verlinken, aber Sie müssen die DLL ausführen.

Es gibt zwei Möglichkeiten, eine DLL zu verwenden. Verknüpfen Sie mit der "Import-Bibliothek" oder "Verwenden Sie LoadLibrary API".

Sie können die DLL-Datei nicht ändern, wenn die DLL geladen wird.

Aber wenn Sie LoadLibrary verwenden, um die DLL zu laden, können Sie FreeLibrary verwenden, um die DLL zu entladen, ändern Sie die DLL und verwenden Sie dann LoadLibrary, um die neue DLL zu laden. Natürlich müssen Sie etwas überwachen, um dieses Verfahren aufzurufen.

Noch einfacher ist, dass, verwenden Sie einen Loader, um das Update zu tun, laden Sie dann die echte exe.