AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 10.2 Firemonkey OS X Frame zerstören

Ein Thema von Loko789 · begonnen am 16. Mär 2018 · letzter Beitrag vom 19. Mär 2018
Antwort Antwort
Loko789

Registriert seit: 23. Sep 2015
74 Beiträge
 
#1

Delphi 10.2 Firemonkey OS X Frame zerstören

  Alt 16. Mär 2018, 08:28
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:
//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;
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?

Danke
Gruß
Loko
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Delphi 10.2 Firemonkey OS X Frame zerstören

  Alt 16. Mär 2018, 20:44
Probier mal:

Delphi-Quellcode:
{$IFDEF MACOS}
xyz.disposeof;
{$ELSE}
xyz.free;
{$ENDIF}
Philip
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi 10.2 Firemonkey OS X Frame zerstören

  Alt 17. Mär 2018, 01:00
Delphi-Quellcode:
if Assigned(famContent) then
  famContent.Free;
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!
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ß.
famContent.DisposeOf; , aber da die Objektvariablen bei ARC wie Interfaces arbeiten, reicht an vielen Stellen auch famContent := nil; .

Delphi-Quellcode:
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;
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Loko789

Registriert seit: 23. Sep 2015
74 Beiträge
 
#4

AW: Delphi 10.2 Firemonkey OS X Frame zerstören

  Alt 19. Mär 2018, 08:45
Super! Vielen Dank.
Funktioniert jetzt ohne Probleme. Bekomme keine Fehlermeldung mehr.

Jetzt muss ich kurz was zitieren:
Delphi…
Zitat:
Was kannst du eigentlich!?
Der Schuh des Manitu
  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:22 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