Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit RegReadBinaryData (https://www.delphipraxis.net/93995-problem-mit-regreadbinarydata.html)

Baeuerle 14. Jun 2007 13:35


Problem mit RegReadBinaryData
 
Hallo,

habe folgenden Code: (Schreiben geht / Auslesen nicht) Was ist false?

Delphi-Quellcode:
// CODE ZUM SPEICHERN
procedure TtfBieter.SaveOptions;
var reg: TRegistry;
    m: TMemoryStream;
begin
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey(cKey,True)then
 begin
 m:=TMemoryStream.Create;
 m.Position:=0;
 tmSchluss.Lines.SaveToStream(m);
 m.Position:=0;
 reg.WriteBinaryData(SCHLUSS,m,m.Size);
 m.Free;
 end
else raise Exception.Create(ermSaveOptions);
finally
 reg.free;
 end;
end;

// CODE ZUM LESEN
procedure TtfBieter.LoadOptions;
var reg: TRegistry;
    m: TMemoryStream;
    size: Integer;
begin
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey(cKey,False)then
 begin
 try
 m:=TMemoryStream.Create;
 size := reg.GetDataSize(SCHLUSS);
 reg.ReadBinaryData(SCHLUSS,m,size)));
 m.Position:=0;
 tmSchluss.Lines.LoadFromStream(m);
 finally
  m.Free;
  end;
 end
else if reg.KeyExists(cKey)then raise Exception.Create(ermLoadOptions);
finally
 reg.free;
 end;
end;
Thx 4 hlp

marabu 14. Jun 2007 16:41

Re: Problem mit RegReadBinaryData
 
Hallo,

du musst in deinem Stream Platz (m.size := GetDataSize) schaffen, bevor du dort etwas ablegen kannst - aber warum einen Stream? Ein einfacher String würde es doch auch tun und der Code wird ein wenig einfacher:

Delphi-Quellcode:
procedure LoadOptions(const key, name: string; lines: TStrings);
var
  reg: TRegistry;
  s: string;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CURRENT_USER;
    if reg.OpenKey(key, False) then
    begin
      SetLength(s, reg.GetDataSize(name));
      reg.ReadBinaryData(name, s[1], Length(s));
      lines.Text := s;
    end else
    if reg.KeyExists(key) then
      raise Exception.Create(ermLoadOptions);
  finally
    reg.free;
  end;
end;
Getippt und nicht getestet.

Grüße vom marabu

CCRDude 14. Jun 2007 16:56

Re: Problem mit RegReadBinaryData
 
Ich denke auch, Du müsstest, wenn du den TMemoryStream verwendest, m.Memory und nicht einfach bloß "m" übergeben...


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