In einem Programm verwende ich u.a. den Virtualtreeview.
Im Finalization Teil der Unit virtualtrees.pas wird eine Bitmap freigegeben. Im Verlauf dessen wird die function DeleteObject(GDIObject: HGDIOBJ): Boolean; aufgerufen, welche wiederum WidgetSet.DeleteObject(GDIObject); aufruft. Zu diesem Zeitpunkt ist aber die Variable widgetset bereits nil. (Wird in Forms.FreeWidgetSet freigegeben und auf nil gesetzt). Das führt natürlich zu einer Zugriffsverletzung.
Soweit mir bekannt ist, werden die finalization Abschnitte in der umgekehrten Reihenfolge der Einbindung der Units aufgerufen.
Dabei ist aber die Unit Forms die erste eingebundene Unit und virtualtrees die letzte.
Ist das ein Fehler oder kann das andere Ursachen haben?
Mein System ist Lazarus 4.7 (rev lazarus_4_6-58-g310cad12d8) FPC 3.2.2 i386-win32-win32/win64
[gelöst] Reihenfolge der finalization?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1782
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
[gelöst] Reihenfolge der finalization?
Zuletzt geändert von fliegermichl am Di 9. Jun 2026, 13:59, insgesamt 1-mal geändert.
Re: Reihenfolge der finalization?
Kannst du versuchen, das in einem kleinen Projekt zu reproduzieren und hochzuladen? Bei allem, was ich mit VTV gemacht habe, ist so ein Fehler noch nie aufgetreten.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1782
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Reihenfolge der finalization?
Hat sich erledigt.
Irgendwie ist in der lpr Datei das einbinden der unit interfaces hinter forms geraten und in interfaces.finalization wird FreeWidgetSet aufgerufen.
Irgendwie ist in der lpr Datei das einbinden der unit interfaces hinter forms geraten und in interfaces.finalization wird FreeWidgetSet aufgerufen.