Entwickler-Ecke

Dateizugriff - DLL mehrfach laden


void* - Do 03.07.03 09:15
Titel: DLL mehrfach laden
Hallo,

nach dem 1. Aufruf von LoadLibrary() wird die DLL geladen. Wenn ich für das Library-Handle kein FreeLibrary() aufrufe und dann wiederrum LoadLibrary(), wird jedoch bloß der Referenzzähler erhöht. Ist es möglich, daß man anstatt dessen die DLL ein zweites mal lädt?


Delete - Do 03.07.03 13:02

Nein. Windows ist doch nicht blöd. :mrgreen:

Auch wenn du in einer anderen Anwendung die DLL noch mal lädst, wird nur deren Referenzzähler um eins erhöht. Es sei denn sie ist mit UPX gepackt, da könnte es passieren, dass Windows sie zweimal läd, weil du mit UPX den Windows Speichermanager aushebelst.

Warum willst du sie denn zweimal laden?


void* - Do 03.07.03 15:32

Sagen wir mal wegen eines unschönen Designs von höherer Stelle wäre es eleganter gewesen (die globalen Daten in der *.dll sind nicht wirklich global, werden aber an verschiedenen Stellen gebraucht, natürlich mit verschiedenen Werten...). Ich habe es jetzt durch hin- und zurückkopieren der globalen Daten gelöst.


Delete - Do 03.07.03 15:35

Ich habe mittlerweile den Posting auf http://www.c-plusplus.de gefunden. Nur schlau geworden bin ich nicht daraus.


tommie-lie - Do 03.07.03 17:05

Wenn du den Post auch verlinken könntest, würde vielleicht jemand anderes draus schlau werden ;-)


Delete - Do 03.07.03 20:31

Warum soll ich jetzt seine Arbeit machen? Aber gut: http://www.c-plusplus.de/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=4&t=009077


Tino - Do 03.07.03 21:51

Luckie hat folgendes geschrieben:
Warum soll ich jetzt seine Arbeit machen?

Weil wir nicht wissen können welches Topic du meinst. Jedenfalls wusste ich es nicht.

Sorry, aber meine Glaskugel ist heute in Reperatur :wink:

Gruß
Tino


Anonymous - Sa 05.07.03 18:01

Falls du auf Shared Sections anspielst, sowas kannst du unter Delphi wirklich nicht einstellen. Bei VC geht es per "pragma".

Da helfen nur noch MMFs.

Oder du lädst die Datei einfach "doppelt".
BTW: Global sind die Daten schon, der Code auch ... aber zwischen den Instanzen können keine Daten ausgetauscht werden.