AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi registry binary erstennen(prob mit dynamic array)
Thema durchsuchen
Ansicht
Themen-Optionen

registry binary erstennen(prob mit dynamic array)

Ein Thema von gandime · begonnen am 22. Jul 2006 · letzter Beitrag vom 22. Jul 2006
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

registry binary erstennen(prob mit dynamic array)

  Alt 22. Jul 2006, 09:10
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

oder kann man iwie anders binary inner reg speichern?

mfg gandime
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: registry binary erstennen(prob mit dynamic array)

  Alt 22. Jul 2006, 09:14
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#3

Re: registry binary erstennen(prob mit dynamic array)

  Alt 22. Jul 2006, 09:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: registry binary erstennen(prob mit dynamic array)

  Alt 22. Jul 2006, 09:32
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#5

Re: registry binary erstennen(prob mit dynamic array)

  Alt 22. Jul 2006, 09:58
jap das wars thx geht jetzt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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