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.