Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   StringList in eigener Klasse (https://www.delphipraxis.net/154069-stringlist-eigener-klasse.html)

youuu 26. Aug 2010 14:28

StringList in eigener Klasse
 
Hi,

ich habe eine Klasse.

z.B.
Delphi-Quellcode:
type
  TMyClass = class
    private
      Fsl: THashedStringList;       // Links
    public
      property sl: THashedStringList read Fsl write Fsl;
      procedure addSl(content: string);
    end;

procedure addSl(content: string);
Begin
  sl.add(content);
end;
Wieso knallt mir da immer die exception rein, lesen von Adresse 000000, als wenn de Stringlist nicht createt ist?
Nur wenn ich ein Create davor pack, knallt es ebenfalls, das von Adresse xxxxxxx.

Delphi-Quellcode:
procedure addSl(content: string);
Begin
  sl.create;
  sl.add(content);
end;

DeddyH 26. Aug 2010 14:34

AW: StringList in eigener Klasse
 
Delphi-Quellcode:
sl := THashedStringList.Create;
Dieser Fehler kommt hier bestimmt einmal die Woche :zwinker:

[edit] P.S.: Wenn Du die Liste schon selbst erzeugst, kannst Du sie auch ReadOnly definieren. Falls Du das nicht willst, solltest Du zumindest einen Setter schreiben, der die übergebene Liste dann mit Assign in Deine eigene kopiert. [/edit]

mkinzler 26. Aug 2010 14:36

AW: StringList in eigener Klasse
 
Delphi-Quellcode:
type
  TMyClass = class
    private
      Fsl: THashedStringList; // Links
    public
      property sl: THashedStringList read Fsl write Fsl;
      procedure addSl(content: string);
    end;

procedure addSl(content: string);
Begin
  if Assigned( Fsl) then Fsl.add(content);
end;
-In den Methoden auf die realen Felder zugreifen
-Vorher überprüfen, ob die Eigenschaft zugewiesen ist

himitsu 26. Aug 2010 14:37

AW: StringList in eigener Klasse
 
Zitat:

Zugriffsverletzung bei Adresse $000000xx
Spricht fast immer für einen NIL-Pointer.

Also wann hast du die Stringliste erstellt, welche du dort nutzen willst?


PS:
Delphi-Quellcode:
write Fsl;
wird sehr schnell zu einem Speicherleck fürhen, wenn du nicht auspaßt.

[edit] wo kommen denn plötzlich die Beiträge her ... huhu? ... blöde RedBox

youuu 26. Aug 2010 14:40

AW: StringList in eigener Klasse
 
Zitat:

Zitat von DeddyH (Beitrag 1045235)
Delphi-Quellcode:
sl := THashedStringList.Create;


Meinte ich natürlich, nur vergessen beim abtippen hinzu zu schreiben :)

DeddyH 26. Aug 2010 14:47

AW: StringList in eigener Klasse
 
Wird die Liste wirklich jedesmal neu erzeugt, wenn ein Eintrag hinzukommen soll?

youuu 26. Aug 2010 14:51

AW: StringList in eigener Klasse
 
Delphi-Quellcode:
if Assigned(FslLink_id) then FslLink_id.add('sss');
Wird aber nie durch laufen, da anscheinend ja die StringList nicht existiert für die Klasse.
Wo muss ich die Stringlist erstellen, damit Sie für die ganze Klasse zur Verfügung steht?

Im Constructor bringt es nichts

mleyen 26. Aug 2010 14:54

AW: StringList in eigener Klasse
 
Delphi-Quellcode:
procedure addSl(content: string);
Begin
  if not Assigned( Fsl) then
    Fsl := THashedStringList.Create;
  Fsl.add(content);
end;

DeddyH 26. Aug 2010 14:56

AW: StringList in eigener Klasse
 
Oder wenn sie in jedem Fall gebraucht wird, im Konstruktor anlegen und im Destruktor wieder freigeben.

mkinzler 26. Aug 2010 14:56

AW: StringList in eigener Klasse
 
Da das ja keine interne Liste ist, sondern extern zugewisen werden kann, kann man sich so einen schönen Leak basteln


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 Uhr.
Seite 1 von 3  1 23      

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