Einzelnen Beitrag anzeigen

Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#1

Problem mit HKStreams und Delphi 2010 (EOutOfMemory)

  Alt 24. Jul 2010, 00:11
Hi,

ich hab ein Problem. Ich hatte damals mal mit Delphi 7 einen Texteditor geschrieben, welcher passwortgeschützte Dateien mit der Komponente HKStreams speichern und laden konnte.

Das wollte ich jetzt wieder aufleben lassen, weil er damals nicht richtig fertig geworden ist.
Mittlerweile habe ich Delphi 2010 und nun ein Problem. Die Komponente habe ich ohne Probleme installiert bekommen.

Jetzt bekomm ich aber bei jedem Versuch eine geschützte Datei zu öffnen den Fehler: EOutOfMemory


Hier mal die Codeschnipsel:
Delphi-Quellcode:
// Meine procedure
procedure LoadFile(FileName: TFileName);
var
 MS: TMemoryStream;
begin
 try
  HKStreams.LoadFromFile(FileName);
 except
  on ECorruptFile do
   Exit;
  on EStreamError do
   Exit;
 end;
 MS := TMemoryStream.Create;
 try
  with HKStreams do
   begin
    GetStream('Text', MS);
    SynEdit.Lines.LoadFromStream(MS);
    MS.Clear;
    ClearStreams;
   end;
 finally
  MS.Free;
 end;
end;

// Proceduren aus der HKStreams-Komponente
procedure THKStreams.LoadFromFile(const Filename: string);
var fs:TFileStream;
begin
 Fs:=TFileStream.Create(FileName,fmOpenRead);
 try
  // Hier bleibt Delphi stehen
  LoadFromStream(fs);
 finally
  FS.free;
 end;
end;

procedure THKStreams.LoadFromStream(ms: TStream);
var CMem,mem : TMemoryStream; e,c:byte; AKey : string;
begin
 AKey:=FKey;
 Cmem:=TMemoryStream.create;
 mem:=TMemoryStream.create;
 try
  ms.Position:=0;
  ms.read(c,sizeof(c));
  ms.read(e,sizeof(e));
  CMem.copyfrom(ms,ms.size-2);
  CMEm.position:=0;
  if (e = EncryptedByte[True]) then begin
   If not assigned(FOnAskForKey) then AKey:=FKey else AKey:=FOnAskForKey(Self);
   try DecryptStream(CMem,AKEy);
   except on Exception do begin foundcorrupt; end; end;
  end;
  if not (c = CompressedByte[True]) then
   if not CheckGood(CMem) then exit;
  CMem.Position:=0;
  if (c = CompressedByte[True]) then
   try
    LHAExpand(Cmem,Mem)
   except
    on Exception do begin
     FoundCorrupt;
    end;
   end
   else Mem.copyfrom(Cmem,0);
  LoadFromStreamNor(Mem);
 finally
  CMem.Free;
  mem.free;
 end;
 FKey:=AKey;
 FCompressed:=(C = CompressedByte[True]);
 FEncrypted:=(e = EncryptedByte[True]);
end;
Wo genau da jetzt der Fehler liegt weiss ich nicht. Ich kann es nicht per Einzelschritt ausführen, weil dann ständig eine WndProc von der Komponente SynEdit ausgeführt wird.
Bloß was ich jetzt nicht verstehe ist, warum es unter Delphi 7 lief und jetzt nicht mehr.
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180

Geändert von mkinzler (26. Jul 2010 um 05:14 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat