DLL entladen und Threads beenden
-
und was is mit der FreeLibraryAndExitThread funktion??
-
Mit der kannst du eine Library entladen und gleichzeitig den AKTUELLEN Thread beenden.
Aktueller Thread != alle Threads die die DLL benutzen.
Grosser Unterschied.
-
der aktuelle thread heisst allg. der aktuelle oder der aktuellste der die dll benutzt?
-
noch ne andere frage .. wenn man eine dll komplett auf einem prozess entläd, müssten die threads die auf funktionen dieser dll zugreifen nich sowieso fehler bekommen und könnten dann ihre aufgabe nicht mehr erledigen??
-
zuiop schrieb:
der aktuelle thread heisst allg. der aktuelle oder der aktuellste der die dll benutzt?
Hat doch hustbaer schon gesagt: Nein.
Es heisst einfach "der aktuelle" (also jener welcher, welcher die Funktion "FreeLibraryAndExitThread" aufruft)Und zum 2.: Ja, der Prozess würde abstürzen, wenn Du dies machst.
-
Achso okay danke aber noch ne frage .. Um die DLL komplett zu entladen müsste ich einfach einmal FreeLibrary aufrufen?
denn z.B. bei MSDN steht bei FreeLibraryAndExitThread:
Decrements the reference count of a loaded dynamic-link library (DLL) by one[...]
http://msdn.microsoft.com/en-us/library/ms683153(VS.85).aspx
Was bedeutet denn "Reference Count" dabei, und gibt es das bei FreeLibrary auch??
-
Der ReferenceCount ist der Zähler, der zählt, wie viele Prozesse die DLL benutzen. Mit FreeLibrary decrementierst du ihn und sagst Windows damit, dass dein Prozess die DLL nicht mehr benutzt. Ist der Zähler bei Null, wirft sie Windows aus dem Speicher, weil sie dann von keinem Programm mehr gebraucht wird.
Eventuell solltest du mal verraten, was du eigentlich vorhast.
-
Achso okay danke _Luckie

Naja ich hab eig garnichts konkretes vor ich versuche im grunde genommen nur zu verstehen wie ein bestimmtes programm funktioniert und zu erraten welche funktionen es benutzt .. ein kollege von mir hat nämlich mit mir gewettet dass ich nicht herausfinde welche funktionen er benutzt hat um ein bestimmtes programm zu manipulieren.. dabei gehts um 50eur xD
-
Nimm nen Disassembler.
-
JUHU ich hab gewonnen xD es is wirklich einfach nur FreeLibrary()

dank euch bin ich nun um 50 eur reicher xD:xmas1: Fröhliche weihnachten und Schöne Feiertage :xmas2:
-
_Luckie schrieb:
Der ReferenceCount ist der Zähler, der zählt, wie viele Prozesse die DLL benutzen. Mit FreeLibrary decrementierst du ihn und sagst Windows damit, dass dein Prozess die DLL nicht mehr benutzt. Ist der Zähler bei Null, wirft sie Windows aus dem Speicher, weil sie dann von keinem Programm mehr gebraucht wird.
Eventuell solltest du mal verraten, was du eigentlich vorhast.
ach quatsch mit soße, luckie. der reference count ist prozessbezogen und wird bei jedem aufruf von LoadLibrary für eine bestimmte dll inkrementiert und bei jedem aufruf von FreeLibrary dekrementiert. bei 0 wird die dll entladen. machst du also das:
LoadLibrary("trottel"); LoadLibrary("trottel")brauchste auch 2 FreeLibrary.
-
Stimmt, du hast Recht:
The system maintains a per-process reference count for each loaded module.