![]() |
AW: Auf "überliegende" Klasse zugreifen ?
Zitat:
Gruß, Olli |
AW: Auf "überliegende" Klasse zugreifen ?
Hey danke für den Comment.
Ich benutze dafür CriticalSections. Wobei ich gelesen habe, dass es bei Lesezugriffen eigentlich keine Speicherverletzungen gibt. Werds wohl jetzt so in etwa machen wie Dejan Vu beschrieben hat. Allerdings schade, dass ich die andere Möglichkeit (Die ich zugegebenermaßen nicht ganz verstehe) nicht verwenden kann. Programmcode sieht da so aus: Falls mal jemand schauen mag warum das eine Zugriffsverletzung gibt.
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; TMainClass = class; TUseFulClass = class private FMainClass: TMainClass; public function DoSomething:boolean; end; TMainClass = class usefulinfos:string; UsefulClass:TUsefulClass; protected constructor Create; end; var Form1: TForm1; MainClass:TMainClass; implementation {$R *.lfm} { TForm1 } constructor TMainClass.Create; begin UsefulClass := TUseFulClass.Create; //UsefulClass.FMainClass := TMainClass.Create; // Macht ja nicht so viel Sinn end; procedure TForm1.Button1Click(Sender: TObject); begin MainClass := TMainClass.Create; MainClass.usefulinfos:= 'Very useful Infos'; Mainclass.usefulClass.DoSomething; end; procedure TForm1.FormCreate(Sender: TObject); begin end; function Tusefulclass.DoSomething:Boolean; begin //Access Violation Form1.Caption:= fmainClass.usefulinfos; end; end. |
AW: Auf "überliegende" Klasse zugreifen ?
Zitat:
Delphi-Quellcode:
Edit: Etwas besser wäre es, wenn du TUseFullClass einen entsprechenden Constructor mit Parameter "Owner" (bzw. "MainClass") hinzufügst und denn so aufrufst:
constructor TMainClass.Create;
begin UsefulClass := TUseFulClass.Create; UsefulClass.FMainClass := self; // aber das hier Würde zumindest funktionieren, auch wenn es etwas unschön ist, wie du an den anderen Kommentaren siehst end;
Delphi-Quellcode:
UsefulClass := TUseFulClass.Create(self);
|
AW: Auf "überliegende" Klasse zugreifen ?
Hey, das funktioniert ja wunderbar :D.
Danke nochmal für die Ausführungen :) |
AW: Auf "überliegende" Klasse zugreifen ?
Zitat:
Da sich die Klassen aber gegenseitig kennen sollen, oder zumindestens die eine Klasse die Andere, dann sollte man der einen Klasse schon einen Constructor geben, wo man ganz praktisch den Instanzzeiger der anderen Klase mitgeben könnte, welchen sie sich dann in einem privatem Feld speichert. Also dein FMainClass wäre dann privat und nicht public verfügbar (maximal als ReadOnly-Property). |
AW: Auf "überliegende" Klasse zugreifen ?
Zitat:
Zitat:
Gruß Olli |
AW: Auf "überliegende" Klasse zugreifen ?
Zitat:
In einem solchen Fall gibt es keine direkte Zugriffsverletzung ("Speicherverletzungen" ist nicht das richtige Wort). Der gelesene Wert ist aber ungültig. Ist das z.B. eine Variable die einen bestimmten Speicherbereich adressiert (z.B. ein Objekt), kann als Folge irgendwo eine Zugriffsverletzung auftreten. Zumindest ist der weitere Programmverlauf dann nicht mehr vorhersehbar. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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