![]() |
Delphi-Version: 7
TStringlist leert sich Selbst!
Hallo :-)
Ich versuche seit stunden ,eine einfache TStringlist mit einfachen Strings zu füllen, doch bereits nach dem Add() eine zeile darunter ist die Liste wieder leer , obwohl ich überhaupt nix leere.
Delphi-Quellcode:
Ich würde mich freuen , wenn mir mal jemand in den nacken kloppt, und mir zeigt was ich falsch mache, weil ich weiß nicht mehr was logic ist.
var
varvalue:TStringlist; varvalueex:TStringlist; function getvarval(str:Pchar):Pchar; var ic:Integer; begin varvalue.LoadFromFile('c:\ls.dat'); varvalueex.DelimitedText:= varvalue.text; for ic:=0 to varvalueex.Count -1 do if VarValueex.Strings[ic] = str then Begin result:=Pchar(VarValueex.Strings[ic+1]); Break; end; showmessage(VarValueEx.Text) end; VarValue:=TStringlist.Create; VarValueEx:=TStringlist.Create; VarValueEx.Delimiter:='='; varvalue.Add('test=hallo'); // und hier ist sie wieder leer ich weiss es nicht zuletzt weil ls.dat 0KB gross ist. // Achja, dass Project Ist eine DLL varvalue.SaveToFile('c:\ls.dat'); PS: Habe einen EStringlistError mit
Delphi-Quellcode:
abgefangen. weil der error meine app ewig crasht ,selbst nach aufräumen des codes, weshalb auch immer. Die listen werden allle vernüftig erstellt und wieder geschlossen von mir.try test() .... except On e : EStringlistError do // Else // end; |
AW: TStringlist leert sich Selbst!
Zitat:
|
AW: TStringlist leert sich Selbst!
Zitat:
![]() Zitat:
|
AW: TStringlist leert sich Selbst!
Hallo
Delphi-Quellcode:
//***--> kann beim letzten Element durch das +1 nicht gutgehen
for ic:=0 to varvalueex.Count -1 do
if VarValueex.Strings[ic] = str then Begin result:=Pchar(VarValueex.Strings[ic+1]); //*** Gruß Frank |
AW: TStringlist leert sich Selbst!
Hallo... ist der Quelltext aus #1 alles ? Zeige mal ein wenig mehr... Der Ausschnitt sagt gar nix.
|
AW: TStringlist leert sich Selbst!
Ja, Fehlermeldungen sollte man gefälligst beachten.
Wenn man die einfach so mutwillig/fahrlässig misachtet, dann soll man sich auch nicht Wundern, wenn es irgendwo knallt. Was saggt denn der Debugger? Ich empfehle auch einen Blick in das Menü "Start" und dort in Parameter.
Delphi-Quellcode:
Und ich empfehle dir ganz dringend ein Tutorial über Pointer.
function getvarval(str:Pchar):Pchar;
begin result:=Pchar(VarValueex.Strings[ic+1]); end; Daß es bei der TStringList nicht sofort knallt, ist ein Zufall und auf Grund der internen Speicherverwaltung der TStringList begründet. Aber eigentlich sollte man besser keinen Pointer auf etwas zurückgeben, was nach der Funktion nicht mehr existieren könnte, wie z.B. eine Stringvariable. Anhand des bissl veröffentlichten Codes (man soll ja schließlich alles Wichtige zeigen, also kann da nichts Wichtiges uns Unbekanntes mehr existieren), wird VarValue und damit auch VarValueEx zu Beginn der Funktion jedesmal neu geladen. Wozu sind das dann globale Variablen, obwohl sie doch offenbar nur eine lokale Funktion ausüben? |
AW: TStringlist leert sich Selbst!
Evtl. ist der Delimiter ungeschickt gewählt, weil sich das mit dem NameValueSeparator beißt.
Versuch es mal mit dieser Änderung - die function lasse ich jetzt mal untouched:
Delphi-Quellcode:
var
varvalue:TStringlist; varvalueex:TStringlist; ... VarValue:=TStringlist.Create; VarValueEx:=TStringlist.Create; // VarValueEx.Delimiter:='='; varvalue.Values['test'] := 'hallo'; // und hier ist sie wieder leer ich weiss es nicht zuletzt weil ls.dat 0KB gross ist. // Achja, dass Project Ist eine DLL varvalue.SaveToFile('c:\ls.dat'); |
AW: TStringlist leert sich Selbst!
Ich habe jetzt
Delphi-Quellcode:
entfernt , und das Resultat ist das die listen jetzt voll bleiben (juhuu) , doch habe ich den EStringlistError der mir die App immer crasht.
try
test() .... except On e : EStringlistError do end; unter var deklariere ich die stringlisten create sie dort wo sie gebraucht werden und schliesse sie am ende der Function wieder. Deswegen kann ich den fehler nicht nachvollziehen. Ich habe nur diese 2 - 3 Stringlisten, und ich habe noch nie diesen fehler gehabt, seit ich mit delphi arbeite .... |
AW: TStringlist leert sich Selbst!
Böses böses Speichern unter C:\.
Win Vista/7 wird das verhindern (Keine Schreibzugriff) bzw. in den Virtuellen Store Umschieben so das du deine Änderungen im Windows Explorer unter C:\ nicht sieht. |
AW: TStringlist leert sich Selbst!
.. wo kommt denn diese Funktion zum Einsatz?
Delphi-Quellcode:
Ich würde die StringList auch als Parameter übergeben.
function getvarval(str:Pchar):Pchar;
var ic:Integer; begin varvalue.LoadFromFile('c:\ls.dat'); varvalueex.DelimitedText:= varvalue.text; for ic:=0 to varvalueex.Count -1 do if VarValueex.Strings[ic] = str then Begin result:=Pchar(VarValueex.Strings[ic+1]); Break; end; showmessage(VarValueEx.Text) end;
Delphi-Quellcode:
Grüße
function getvarval(var myStringList: TStringList;str:Pchar):Pchar;
var ic:Integer; sl : TStringList; begin if assigned(myStringList) then begin sl := TStringList.create; try sl.LoadFromFile('c:\ls.dat'); myStringList.DelimitedText:= sl.Ttext; for ic:=0 to myStringList.Count -2 do if myStringList.Strings[ic] = str then Begin result:=Pchar(myStringList.Strings[ic+1]); Break; end; showmessage(myStringList.Text) finally sl.free; end; end; end; Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 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