![]() |
Delphi 10.2 Firemonkey OS X Frame zerstören
Hallo,
In meiner Anwendung habe ich die einzelnen Bereiche in Frames aufgeteilt. Dieser werden zur Laufzeit (je nachdem welchen Programmpunkt man gewählt hat)erstellt und wieder zerstört. Dies sieht wie folgt aus:
Delphi-Quellcode:
Nun bekomme ich immer beim famContent.free eine access violation. Unter Windows Funktioniert das ohne Probleme aber unter OS X bekomme ich immer eine access violation. Gibt es eine andere Möglichkeit das Frame freizugeben?
//code...
var famContent:TFrame; {<-- ist global deklariert} //code... procedure TfrmMain.LoadFrame(TagID: Integer); begin if famContent <> nil then famContent.free; {<-- Error} tthread.CreateAnonymousThread( procedure begin try case TagID of 1: // Benutzer begin famContent := TfamProfil.Create(lyContent); (famContent as TfamProfil).StartUp; end; 3: // projekt begin famContent := TfamProjekt.Create(lyContent); (famContent as TfamProjekt).StartUp; end; end; except on E: Exception do tthread.Synchronize(nil, procedure begin LostConnection; end); end; famContent.Parent := lyContent; famContent.Align := TAlignLayout.client; tthread.Synchronize(nil, procedure begin mdlClient.initLang(famContent); mvMenue.HideMaster; end); end).Start; end; Danke Gruß Loko |
AW: Delphi 10.2 Firemonkey OS X Frame zerstören
Probier mal:
Delphi-Quellcode:
{$IFDEF MACOS}
xyz.disposeof; {$ELSE} xyz.free; {$ENDIF} |
AW: Delphi 10.2 Firemonkey OS X Frame zerstören
Delphi-Quellcode:
Free prüft intern schon auf nil, aber wenn zusätzlich sowieso irgendwo auf nil geprüft wird, dann sollte/muß man die Variable auch immer leeren!
if Assigned(famContent) then
famContent.Free;
Delphi-Quellcode:
FreeAndNil(famContent);
Ansonsten hat Darlo leider schon gezeigt, dass man IMHO hier bissl Mist gebaut hat, als jemand auf die schwachsinnige Idee kam, dass unter ARC das Free rein garnichts mehr macht und man totalinkompatibel stattdessen was Neues verwenden muß.
Delphi-Quellcode:
, aber da die Objektvariablen bei ARC wie Interfaces arbeiten, reicht an vielen Stellen auch
famContent.DisposeOf;
Delphi-Quellcode:
.
famContent := nil;
Delphi-Quellcode:
Aber zum Glück macht DisposeOf ohne ARC das Selbe wie Free ... nur blöd, dass diese Methode in alten Delphis nicht existiert und man so keine schönen ach so super abwärtskompatible Codes schreiben kann, wie es immer beworben wurde. :evil::?
procedure TObject.Free;
begin // under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear {$IFNDEF AUTOREFCOUNT} if Self <> nil then Destroy; {$ENDIF} end; |
AW: Delphi 10.2 Firemonkey OS X Frame zerstören
Super! Vielen Dank.
Funktioniert jetzt ohne Probleme. Bekomme keine Fehlermeldung mehr. Jetzt muss ich kurz was zitieren: Delphi… Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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