![]() |
Runtime Packages + finalization (globale units)
Jetzt ist es mal wieder soweit das ich zum zweiten mal in kurzer Zeit auf das selbe Problem mit runtime Packages stoße.
Situation ist folgende:
Die Frage ist jetzt ob ich das ganze umgehen kann OHNE die ganzen finalization Blöcke der third party units umzuschreiben (also ohne entsprechende nil checks einzubauen). Hier noch ein konkretes Beispiel:
Delphi-Quellcode:
Aufgrund der Verwendung von Graphics32 als runtime packages teilen sich all dlls und die host anwendung die gleiche Unit und damit die gleiche Variable GlobalPerfTimer. Trotzdem wird der finalization block beim beenden für jede einzelne dll aufgerufen (lustigerweise wird der initialization block nur einmal ausgeführt). Das erste mal geht das natürlich gut, beim zweitem Aufruf des finalization blocks wurde die variable natürlich schon freigegeben und die entsprechende Access Violation folgt.
unit GR32_System.pas;
[...] var GlobalPerfTimer: TPerfTimer; [...] implementation [...] initialization [...] GlobalPerfTimer := TPerfTimer.Create; finalization GlobalPerfTimer.Free; [...] Einfache lösung wäre natürlich das ganze umzuschreiben in (noch nicht getestet, aber ich geh mal davon aus das das gehen sollte)
Delphi-Quellcode:
Das würde ich aber vermeiden wollen da ich ungern third Party units modifiziere (wenn es sich nicht vermeiden läßt) und das gerade bei JVCL in viel arbeit ausartet (bei JVCL tritt das Problem mit der lustigen uxtheme dll auf weil die xp theming klasse mehrfach freigeben wird).
[...]
finalization if GlobalPerfTimer <> nil then begin GlobalPerfTimer.Free; GlobalPerfTimer := nil; end; [...] Aktuell suche ich noch verzweifelt nach einer möglichkeit das irgendwie anders zu lösen. Konnte aber im Netz bisher nichts brauchbares zu finden (mal von den "hilfe ich krieg einen runtime 216 error beim beenden meiner Anwendung, warum???" beiträgen abgesehen ;) ) Deshalb auch dieser etwas ausführlichere Beitrag, ich hoffe irgendwer hat eine Idee wie man das ganze ohne umschreiben der finalization blöcke lösen könnte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 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 by Thomas Breitkreuz