AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Richtiges Beenden/Freigeben einer (Delphi) DLL
Thema durchsuchen
Ansicht
Themen-Optionen

Richtiges Beenden/Freigeben einer (Delphi) DLL

Ein Thema von OlliWW · begonnen am 21. Jun 2022 · letzter Beitrag vom 21. Jun 2022
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Richtiges Beenden/Freigeben einer (Delphi) DLL

  Alt 21. Jun 2022, 13:42
Hast du mal probiert dass FreeLibrary testweise in ein FormClose o.ä. zu packen um ein/auszuschließen dass es am finalization liegt?
Dann seh ich in deiner DLL ein Interface. Da gibt es auch einige Möglichkeiten ins Fettnäpfchen zu treten.
Wie gibst du denn deine Objekte in der DLL frei?

$C0000005 ist übrigens nur der interne Code für Zugriffsverletzungen.
Die meisten deiner Vermutungen sind denke ich falsch. DLL und Anwendung teilen sich einen Speicher.
Da sieht Windows selbst erst mal keinen Unterschied.

PS: Dein try-finally oben bewirkt rein gar nichts wenn das finally leer ist.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (21. Jun 2022 um 13:44 Uhr)
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#2

AW: Richtiges Beenden/Freigeben einer (Delphi) DLL

  Alt 21. Jun 2022, 13:48
Hast du mal probiert dass FreeLibrary testweise in ein FormClose o.ä. zu packen um ein/auszuschließen dass es am finalization liegt?
Ich hab das FreeLibrary mal zum testen in einen Button gelegt: Gleiches Phänomen.
Ich kann die DLL noch soweit debuggen, dass ich sehe dass der Finalization teil der DLL getriggert wird (wenn ich ihn implementiere). Das heisst, von meinem Verständnis läuft es wie folgt:

Anwendung: FreeLibrary
DLL: finalization der dll methoden
DLL: finalization der verwendeten units
DLL: <crash...in einer der verwendeten units>

Der Code funktioniert außerhalb einer DLL übrigens ohne Probleme, Memory Leaks etc. Alles was meine DLL ja macht, ist den Logger eine Drittkomponente zu initialisieren.

PS: Dein try-finally oben bewirkt rein gar nichts wenn das finally leer ist.
Ist nur "test code", kein sauber aufgeräumter Code. Ich habe mir nur schnell ein Testprogramm für den DLL Call geschriebnen um andere Seiteneffekte ausschließen zu können.
  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 00:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz