Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Exception bei TObjectList (https://www.delphipraxis.net/171315-exception-bei-tobjectlist.html)

Moony 31. Okt 2012 08:06

Exception bei TObjectList
 
Hallo zusammen,

ich versuche mit Generic.Collections TObjectList<T> zu arbeiten, aber ich bekomme eine Exception und weiß nicht warum.
Folgenden Quellcode habe ich von meinem eigentlichen Program abgekapselt:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Generics.Collections;

type
  TmyZKS = class
    ZKSID       : Integer;
    ZKSExportTab : AnsiString;
    constructor Create(const ZKSID: Integer; const ZKSExportTab : AnsiString);
  end;

type
  TZKSConfig = class
    private
    public
      ZKSType     : TObjectList<TmyZKS>;
      ZKSExport   : TStringList;
      constructor Create;
      destructor Destroy; override;
  end;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2    : TForm2;
  myConfig : TZKSConfig;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Close;
end;

{ TmyZKS }

constructor TmyZKS.Create(const ZKSID: Integer; const ZKSExportTab: AnsiString);
begin
  Self.ZKSID       := ZKSID;
  Self.ZKSExportTab := ZKSExportTab;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  myConfig.Free;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
  myConfig.Create;
end;

{ TZKSConfig }

constructor TZKSConfig.Create;
begin
  // Hier knallt es!
  ZKSType  := TObjectList<TmyZKS>.Create();
  ZKSExport := TStringList.Create;
end;

destructor TZKSConfig.Destroy;
begin
  ZKSExport.Free;
  ZKSType.Free;

  inherited;
end;

end.
Ich verstehe nicht warum? Wenn ich die ObjectList als lokale Variable und nicht in der Klasse deklariere, dann kann ich die ObjectList erstellen. Ich hoffe ihr könnt mir helfen.

Grüße, Moony

Bernhard Geyer 31. Okt 2012 08:11

AW: Exception bei TObjectList
 
Wieso ist es eigentlich üblich die Fehlermeldung einer Exception nicht zu posten?:roll:

DeddyH 31. Okt 2012 08:14

AW: Exception bei TObjectList
 
Zitat:

Delphi-Quellcode:
procedure TForm2.FormShow(Sender: TObject);
begin
  myConfig.Create;
end;

Das dürfte die fehlerverursachende Stelle sein.
Delphi-Quellcode:
procedure TForm2.FormShow(Sender: TObject);
begin
  myConfig := TZKSConfig.Create;
end;
So besser?

Moony 31. Okt 2012 08:20

AW: Exception bei TObjectList
 
@DeddyH: Na das war ja einfach. Hätte auch selbst drauf kommen können.

Danke. Problem ist somit erledigt.

Grüße, Moony

DeddyH 31. Okt 2012 08:22

AW: Exception bei TObjectList
 
Du fängst Dir aber u.U. Speicherlecks ein, da bei jedem Show eine neue Instanz erstellt und die alte überschrieben wird. Freigegeben wird sie ja im OnClose, das passt nicht richtig zusammen. Spricht etwas dagegen, die Instanz im OnCreate anzulegen und im OnDestroy wieder freizugeben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 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