Entwickler-Ecke
Sonstiges (Delphi) - Merkwürdiger Fehler
mcbrunox - Fr 21.02.03 15:41
Titel: Merkwürdiger Fehler
hallo,
bei diesem code tritt immer ein fehler auf, weis aber nicht wieso.
auch wenn ich vorher keyname.clear nehme <ist der fehler wieder dort.
"zugriffsverlezung an adresse ...."
Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Button1Click(Sender: TObject); var keyname:tstrings; begin keyname.add('123123'); end; |
mach ich hier einen fehler oder liegts an delphi :roll:
foxy - Fr 21.02.03 15:43
nein schau
du hast keyname als tstrings deklariert ...
wenn du nur add machst, brauchst du auch Tstrings und keinen normalen string
also machst du es weder so
Ungetestet:
Quelltext
1:
| Keyname.add[1]('1234'); |
oder
Keyname.add.lines('1234');
wie gesagt habs nicht getestet ...
mcbrunox - Fr 21.02.03 15:54
gut mit tstringlist.create; eine zeile vorher hats geklappt...
aber wieso kann er die key's nicht einlesen ?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var reg:tregistry; w,w2,i:integer; keys,s:string; keyname:tstrings; begin Reg:=Tregistry.Create; reg.RootKey:=HKEY_CURRENT_USER; Reg.OpenKey('Identities',true); tstringlist.create; // << mit dem gehts auch reg.GetKeyNames(keyname);i:=0; // jetzt ist hier der fehler ... ... end; |
ich machs so wie in der beschreibung mit tstrings aber der ...schmarrn[/code]
Keldorn - Fr 21.02.03 15:57
wo weißt Du denn keyname zu? von keyname gibts keine instanz
Quelltext
1:
| keyname := TStringList.Create; |
| Zitat: |
ich machs so wie in der beschreibung mit tstrings aber
|
das steht dort bestimmt nicht so drin :roll:
Frank
mcbrunox - Fr 21.02.03 16:02
hast recht..jetzt probier ich schon stundenlang,,,komm nicht mal auf die idee in google nachzuschaun und dann dass hier...sorry :arrow:
danke trotzdem
Keldorn - Fr 21.02.03 16:05
wieso google?
f1 reicht - dort ist auch ein schönes Beispiel inkl. Try-Block drin
Anonymous - Fr 21.02.03 17:03
Paar Tips noch:
- Wo ein Create, da auch ein Free. Das ist ein Muß. Wenn du also ein Create anwendest, dann mußt du diese Variable auch mit Free freigeben. Objekte sind nicht wie normale Variablen. Der Speicherplatz wird nicht automatisch beim beenden der Prozedur oder Programms wieder freigegeben.
- Wo ein Create, da auch ein try..finally. Das ist jetzt kein Muß wie mit Free, aber bei einem Fehler wird eventuell Free nicht ausgeführt. Deshalb muß du es mit Finally erzwingen.
Hier ein Beispielcode vie man es machen sollte:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var sl: TStringList; begin sl := TStringList.Create; try //... mach was finally sl.Free; end; end; |
Das ist das Minimum beim Arbeiten mit Objekten.
Noch ein kleiner Tip zum Schluß. Tippe das Wort
try in Delph ein und Drücke dann gleichzeitig
STRG + J. Es öffnet sich ein kleines Fenster in dem du etwas auswählen kannst. Gleich an der ersten Stelle findest du den Schutzblock für Objekt-Variablen. Einfach bestätigen und das kommt raus:
Quelltext
1: 2: 3: 4: 5: 6:
| variable := typename.Create; try
finally variable.Free; end; |
Jetzt braucht man nur noch variable und typename ersetzen und schon hat man nichts vergessen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!