Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi registry binary erstennen(prob mit dynamic array) (https://www.delphipraxis.net/73692-registry-binary-erstennen-prob-mit-dynamic-array.html)

gandime 22. Jul 2006 08:10


registry binary erstennen(prob mit dynamic array)
 
hi,
ich möchte einen binary eintrag inner reg machen und zwar is da das prob die dynamic array

ohne gehts:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  binary_buf:array[0..1] of char;
begin
  treg:=tregistry.create;
  TReg.RootKey:=HKEY_LOCAL_MACHINE;
  TReg.OpenKey('SOFTWARE\',False);
  if TReg.ValueExists('SOFTWARE\') = False then
  begin
    binary_buf[0]:=char(66);
    binary_buf[1]:=char(67);
    treg.WriteBinaryData('ka',binary_buf,sizeof(binary_buf));
    edit1.text:=binary_buf[0]+binary_buf[1];
  end;
end;

//--> ergebnis inner reg: 'BC'
//--> ergebnis im edit1.text: 'BC'
mit dynamic array nicht

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  binary_buf:array of char;
begin
  treg:=tregistry.create;
  TReg.RootKey:=HKEY_LOCAL_MACHINE;
  TReg.OpenKey('SOFTWARE\',False);
  if TReg.ValueExists('SOFTWARE\') = False then
  begin
    SetLength(binary_buf,1);
    binary_buf[0]:=char(66);
    binary_buf[1]:=char(67);
    treg.WriteBinaryData('ka',binary_buf,sizeof(binary_buf));
    edit1.text:=binary_buf[0]+binary_buf[1];
  end;
end;

//--> ergebnis inner reg: '   ˜P¦.'
//--> ergebnis im edit1.text: 'BC'
tjoa jetzt muss ich blos noch wissen wo das prob is :?: :mrgreen:

oder kann man iwie anders binary inner reg speichern?

mfg gandime

SirThornberry 22. Jul 2006 08:14

Re: registry binary erstennen(prob mit dynamic array)
 
ein dynamsiches Array ist ein Pointer der auf die Daten zeigt. Daher ist SizeOf(Dynamsiches Array) immer genau so groß wie ein Pointer. um Die Größe zu ermitteln solltest du also die Anzahl der Einträge (mit Length ermitteln) mit der Größe eines Eintrags (Sizeof(char) bzw. SizeOf(DynArray[0])) multiplizieren.
Von daher sollte es so gehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  binary_buf:array of char;
begin
  treg:=tregistry.create;
  TReg.RootKey:=HKEY_LOCAL_MACHINE;
  TReg.OpenKey('SOFTWARE\',False);
  if TReg.ValueExists('SOFTWARE\') = False then
  begin
    SetLength(binary_buf,1);
    binary_buf[0]:=char(66);
    binary_buf[1]:=char(67);
    treg.WriteBinaryData('ka',binary_buf[0],Length(binary_buf) * SizeOf(char));
    edit1.text:=binary_buf[0]+binary_buf[1];
  end;
end;

gandime 22. Jul 2006 08:26

Re: registry binary erstennen(prob mit dynamic array)
 
joa also für den ersten array-eintrag geht es aber wie bekomme ich dann die anderen aus der array in den selben reg-eintrag?

SirThornberry 22. Jul 2006 08:32

Re: registry binary erstennen(prob mit dynamic array)
 
eigentlich sollten auf die Weise alle Einträge des Arrays in der Registry landen
"binary_buf[0]" dient zur dereferenzierung. Also sozusagen den Pointer auf den ersten zu schreibenden Eintrag dereferenzieren. Denn wenn du nur
"binary_buf" verwendest wird nur der Pointer der auf die eigentlichen Daten zeigt, geschrieben + die Daten welche dahinter im speicher stehen.

Ahh, hab den Fehler gefunden warum du nur ein element in die Registry schreibst:
Delphi-Quellcode:
SetLength(binary_buf,1); //du setzt die länge des Arrays nur auf 1
binary_buf[0]:=char(66); //Das ist ok, du schreibst in das 0te element (length1)
binary_buf[1]:=char(67); //Gar nicht gut, du schreibst über das Array hinaus, es hat doch nur eine Länge von 1 und (höchster Index = 0) und du schreibst auf Index 1
Gib also bei SetLength als letzten Parameter die 2 an wenn du 2 elemente darin speichern willst.

gandime 22. Jul 2006 08:58

Re: registry binary erstennen(prob mit dynamic array)
 
jap das wars thx geht jetzt


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz