Autor Beitrag
mcbrunox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 92



BeitragVerfasst: Fr 21.02.03 15:41 
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 ...."

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: 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:

ausblenden Quelltext
1:
Keyname.add[1]('1234');					

oderKeyname.add.lines('1234');

wie gesagt habs nicht getestet ...

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
mcbrunox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 92



BeitragVerfasst: Fr 21.02.03 15:54 
gut mit tstringlist.create; eine zeile vorher hats geklappt...
aber wieso kann er die key's nicht einlesen ?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 21.02.03 15:57 
wo weißt Du denn keyname zu? von keyname gibts keine instanz
ausblenden 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
mcbrunox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 92



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 21.02.03 16:05 
wieso google?
f1 reicht - dort ist auch ein schönes Beispiel inkl. Try-Block drin

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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.