Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Registry Lesen (https://www.delphipraxis.net/152783-registry-lesen.html)

Dieter11 6. Jul 2010 22:01

AW: Registry Lesen
 
Ja, habe ich

Matze 7. Jul 2010 05:41

AW: Registry Lesen
 
Zu einem "OpenKey" gehört immer auch ein "CloseKey". Der Aufruf fehlt bei dir beim Auslesen. Beim Schreiben hast du diesen Aufruf drinnen. ;)

Das nur nebenbei bemerkt.

himitsu 7. Jul 2010 07:17

AW: Registry Lesen
 
Zitat:

Zitat von Matze (Beitrag 1033892)
Zu einem "OpenKey" gehört immer auch ein "CloseKey".

kann man ... muß man aber nicht :angel2:
Delphi-Quellcode:
function TRegistry.OpenKey(const Key: string; Cancreate: boolean): Boolean;
begin
  Result := CheckResult(RegOpenKeyEx(GetBaseKey(Relative), PChar(S), 0,
    FAccess, TempKey));
  ...
  if Result then
  begin
    ...
    ChangeKey(TempKey, S); <<<<<
  end;
end;

procedure TRegistry.ChangeKey(Value: HKey; const Path: string);
begin
  CloseKey; <<<<<
  ...;
end;
Und nochmal zum CloseKey vor Free.
Delphi-Quellcode:
destructor TRegistry.Destroy;
begin
  CloseKey; <<<<<
  inherited;
end;
PS:
Delphi-Quellcode:
Finally
  Registry.CloseKey;
  Registry.Free;
End;
und das ist Syntaktisch auch falsch.
(auch wenn es hier vermutlich in CloseKey nie zu einer Exception kommt)
Vor dem Free ruft man nix mehr auf ... denn wenn da was passieren würde, dann wäre der Resourcenschutzblock Wirkungslos, da Free dann dennoch nicht aufgerufen würde.

mkinzler 7. Jul 2010 07:20

AW: Registry Lesen
 
Sauberer ist aber wenn man sich angewöhnt alles zu Schliessen was man geöffnet hat unabhängig, b es 100% notwendig ist oder nicht

himitsu 7. Jul 2010 07:33

AW: Registry Lesen
 
Es ist ja nicht falsch es dennoch zu machen :D


Delphi-Quellcode:
VAR
  Registry : TRegistry;
  WriteReportToRegistry : Boolean;

begin
  WriteReportToRegistry := True;
  Registry := TRegistry.Create;
  Registry.RootKey := HKEY_LOCAL_MACHINE;

  if Registry.KeyExists('\Software\SysIT\Nails4You') = False then
     Try
        Registry.CreateKey('\Software\SysIT\Nails4You');
     Except
        Registry.Free;
          WriteReportToRegistry := False;
          ///// 1 /////
          Registry.WriteString ('Mandant', DBEdit_MandantNr.Text);
        Exit;
     END;

  Try
    if Registry.OpenKey('\Software\SysIT\Nails4You', True) = True then
       Registry.WriteString ('Mandant', DBEdit_MandantNr.Text)
       ELSE
          Begin
              MessageDLG('Es konnte nicht in die Registry geschrieben werden', mtError, [mbOK], 0);
              ///// 2 /////
              Registry.WriteString (DBEdit_MandantNr.Text, DSN);
          End;

  Finally
      Registry.CloseKey;
      Registry.free;
  End;
1: Der Key konnte nicht erstellt werden, Registry wurde auch schon freigegeben ... wie soll da jetzt eigentlich das WriteString ausgeführt werden?

2: Der Key konnte nicht geöffnet werden ... wohin will da WriteString denn nun schreiben?

3: Man prüft/vergleicht nicht auf True oder False.
Delphi-Quellcode:
if not Registry.KeyExists(...) = then
if Registry.OpenKey(...) then

mkinzler 7. Jul 2010 07:36

AW: Registry Lesen
 
@Frank: Du hast aber 2 mal darauf hingewiesen, dass es nicht notwendig ist, damit hast du genau diesen Eindruck erweckt!
Man sollte sich angewöhnen es trotzdem zu machen.

himitsu 7. Jul 2010 07:39

AW: Registry Lesen
 
War auch mehr ans Mätzchen gerichtet ... bei ihm klang es so, als wenn es unbedingt nötig ist. :stupid:

Wenn man sich das OpenKey als ChangeToKey vorstellt, dann wäre es wohl einleuchtender, warum man es nicht unbedingt wieder schließen muß. :angel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 Uhr.
Seite 2 von 2     12   

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