AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Dynamisch eingebundene Dll im laufenden Betrieb austauschen
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisch eingebundene Dll im laufenden Betrieb austauschen

Ein Thema von hschmid67 · begonnen am 2. Dez 2024 · letzter Beitrag vom 2. Dez 2024
Antwort Antwort
hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
73 Beiträge
 
Delphi 12 Athens
 
#1

Dynamisch eingebundene Dll im laufenden Betrieb austauschen

  Alt 2. Dez 2024, 15:48
Hallo zusammen,

ich versuche gerade vergeblich, eine dynamisch geladene eigene DLL in meinem Programm zu deaktivieren (FreeLibrary), sie neu zu kompilieren und neu zu laden, aber leider funktioniert das nicht so wie erwartet.
  1. Laden der DLL: LoadLibrary
  2. Ent-Laden der DLL: FreeLibrary
  3. Ändern des Quellcodes
  4. Neu kompilieren der DLL (mit msbuild) in ein Temp-Verzeichnis
  5. Umbenennen der bisherigen DLL
  6. Verschieben der neuen DLL ins alte Verzeichnis
  7. Laden der DLL: LoadLibrary

Doch wenn ich die neue DLL lade und eine Funktion aufrufe, erhalte ich immer noch das Ergebnis der alten DLL.

Hmmm, vermutlich klappt das Ent-Laden nicht so ganz. Denn wenn ich dann das Programm schließe und neu starte, ist die neue Version der DLL verfügbar. Wie kann ich denn überprüfen, ob die alte Version wirklich entladen ist? Gibt es ein (freies) Tool, mit dem man alle von einem Prozess geladenen DLLs gut und übersichtlich sehen kann, vielleicht sogar live, sodass ich das Ent-Laden nachverfolgen könnte?

Bin für jede Hilfe dankbar.
Viele Grüße
Harald
Harald Schmid
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Dynamisch eingebundene Dll im laufenden Betrieb austauschen

  Alt 2. Dez 2024, 16:24
Ohne Source : [GlaskugelMode = ON]

Vielleicht hast Du einen statischen Link auf die DLL - 2x geladen?

Mavarik

PS: Ich mache um jede DLL einen Interface-Wrapper. Out of Scope und weg...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Dynamisch eingebundene Dll im laufenden Betrieb austauschen

  Alt 2. Dez 2024, 16:43
Löschen, anstatt Umbenennen.

Umbenennen/verschieben geht auch, selbst wenn eine Datei als MMF geladen ist, wie z.B. von einem normalen LoadLibrary (nur bei direktem Zugriff über ein aktives DateiHandle nicht)
Löschen lässt sie sich dagegen aber nicht, so lange sie noch irgendwo geladen ist.
$2B or not $2B
  Mit Zitat antworten Zitat
hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
73 Beiträge
 
Delphi 12 Athens
 
#4

AW: Dynamisch eingebundene Dll im laufenden Betrieb austauschen

  Alt 2. Dez 2024, 18:37
Danke für Eure Unterstützung, die mich dann doch auch auf die richtige Debugging-Spur gebracht hat:

ich hab alle LoadLibrary und FreeLibrary mit Codesite ausgeben lassen:

Delphi-Quellcode:
lHandle := LoadLibrary(PChar(mModuleFilename));
CodeSite.Send('LoadLibrary', lHandle);
...
CodeSite.Send('FreeLibrary', lHandle);
FreeLibrary(lHandle);
und im einen Fall bekomme ich bei lHandle eine gültige Zahl, beim FreeLibrary aber ist lHandle = 0

Also muss ich da weitersuchen

Vielen Dank und schönen Abend noch
Harald
Harald Schmid
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Dynamisch eingebundene Dll im laufenden Betrieb austauschen

  Alt 2. Dez 2024, 19:28
ich hab alle LoadLibrary und FreeLibrary mit Codesite ausgeben lassen:
Kannst du das auf dem PC mit Delphi nicht nachstellen? Sonst wäre ein simpler Haltepunkt ja um Größenordnungen einfacher. Mit einem Datenhaltepunkt kannst du auch sofort feststellen, wo die Variable lHandle geändert wird.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz