Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Registry (Standard) auslesen, Fehlermeldungen (https://www.delphipraxis.net/70248-registry-standard-auslesen-fehlermeldungen.html)

Delphijunkie2006 27. Mai 2006 17:53


Registry (Standard) auslesen, Fehlermeldungen
 
Hi eine Frage, wie schafft es Delphi7 diesen Standard Wert ohne Fehlermeldung auszulesen?

Delphi-Quellcode:
Function pascan: string;
begin Reg := TRegistry.Create;
Reg.Rootkey:=HKEY_CLASSES_ROOT; Reg.Openkey('.~pas', true);
Result := Reg.Readstring(''); Reg.Destroy;
end;

procedure showpas;
begin if pascan = '~pas auto file' then showmessage('alles ok!');
reg.destroy; end;
Er macht es aber danach kommt Fehlermeldung:
Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.

Wie kriegt man diesen Fehler weg?

mkinzler 27. Mai 2006 17:56

Re: Registry (Standard) auslesen, Fehlermeldungen
 
Das sieht komisch aus:
Zitat:

Delphi-Quellcode:
Result := Reg.Readstring('');


Delphijunkie2006 27. Mai 2006 18:41

Re: Registry (Standard) auslesen, Fehlermeldungen
 
(STandard) kann nur mit '' ausgelesen werden oder kennst du eine bessere Methode?

TBx 27. Mai 2006 19:00

Re: Registry (Standard) auslesen, Fehlermeldungen
 
Ich gehe davon aus, daß Du den Fehler bekommst, wenn Du schowpas aufrufst.

Nach der Ausführung der Funktion ist Reg nicht mehr mit einem gültigen Objekt besetzt. In der Funktion zerstörst Du das Objekt bereits.

Gruß

Onlinekater

Delphijunkie2006 28. Mai 2006 15:18

Re: Registry (Standard) auslesen, Fehlermeldungen
 
Ich werds ausprobieren aber auch mit reg.close und reg.free in der function kam dasgleiche Problem.

Luckie 28. Mai 2006 15:25

Re: Registry (Standard) auslesen, Fehlermeldungen
 
Warum rufst du in schowpas reg.destroy auf? Du erstellst doch gar kein Objekt.

Und etwas Formatierung des Quellcodes würde bestiummt auch gut tun:

Delphi-Quellcode:
function pascan: string;
var
  Reg: TRegistry; // !!!
begin
  Reg := TRegistry.Create(KEY_READ); // !!! 
  try // !!!
    Reg.Rootkey := HKEY_CLASSES_ROOT;
    if Reg.Openkey('.~pas', False) then // !!!
    begin
      Result := Reg.Readstring('');
      Reg.Close; // !!!
    end;
  finally // !!!
    Reg.Free; // !!!
  end;
end;

procedure showpas;
begin
  if pascan = '~pas auto file' then
    showmessage('alles ok!');
end;
Dann fällt auch auf, dass du die Variable Reg gar nicht deklariert hast. Desweiteren fehlt der Ressourcenschutzblock und man sollte nie Destroy direkt aufrufen, sondern Objekte immer mit Free freigeben - steht aber auch in der Hilfe. :?

Ich habe mal so eion paar eklatante Fehler bei dir korrigiert.


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