Zapisać Strumień do Rejestru

0

3bobry

Mam mały problem z takim oto kodzikiem, bo muszę zapisać zawartość strumienia do rejestru:

var globalne to:

  Reg : TRegistry;
  Buf : array of byte;
  Stream : TMemoryStream;

i dalej tak:

Reg := TRegistry.Create;
  Stream := TMemoryStream.Create;
  try
       Reg.OpenKey('Software\Misieksoft\TEST', True);
       // RichEdit1
       Stream.Clear;
       RichEdit1.Lines.SaveToStream(Stream);
       Stream.Position := 0;
    {1}   SetLength(Buf,Stream.Size);
       Stream.Read(Buf,Stream.Size);
       Reg.WriteInteger('TestSize',Stream.Size);
       Reg.WriteBinaryData('TestText',Buf,Stream.Size);
        // RichEdit2
    {2}   Buf := nil;
       Stream.Clear;
       RichEdit2.Lines.SaveToStream(Stream);
       Stream.Position := 0;
    {3}  SetLength(Buf,Stream.Size);
       Stream.Read(Buf,Stream.Size);
       Reg.WriteInteger('Test2Size',Stream.Size);
       Reg.WriteBinaryData('Test2Text',Buf,Stream.Size);
    finally
    Reg.Free;
    end;

i oczywiście wywala błąd:
Acces violation at address 0041AE76 in module 'Project1.exe' Read of address 615c3166

Po zmianie Buf na :

Buf : array [0..500] of byte;

i usunięciu z kodu punktów 1,2 i 3 wszystko działa. Ale ja nie wiem jak dużego bufora będę potrzebował.

Co robię źle?

Ejjj!

Ja tego potrzebuje.

Przynajmniej napiszcie czy dobrze ustawiam wielkość buforu bo przy po tym mi błąd wywala.

Plizzzzz

0

Ej to był ruski gej.

Tu masz mały przykłąd

Const MaxLength=5120;

Procedure SaveCoolBar(CoolBar:TCoolBar;Const Nazwa:String;Reg:TRegistry);
Var Stream:TMemoryStream;
    Buf:Array[0..MaxLength] Of Byte;
Begin
  Stream:=TMemoryStream.Create;
  Stream.WriteComponent(CoolBar);
  Stream.Position:=0;
  Stream.Read(Buf,Stream.Size);
  Reg.WriteBinaryData(Nazwa,Buf,Stream.Size);
  Stream.Free;
End;
0

Ja właśnie z tego kodu korzystałem pisząc to, ale ja nie znam wartości:

const MaxLength=5120;

I co ty na to ?

0

To zrób dynamiczną tablice skaldajaca sie z bajtow, ustawiaj jej konkretny rozmiar i odczytuj ze strumienia i nastepnie pakuj w rejestr. Nie polecam pakowac niewiadom ile danych, bo im mniejszy rejestr tym szybciej windows działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1