Sicher, daß das je richtig gelaufen ist? IMO gibt es (laut Hilfe) kein Overlay für TMemoryStream. Dein Code bringt auch unter 10.2 falsche Ergebnis. Ich vermute, es wird der Zweig für Update(const AData; ALength: Cardinal); overload;
verwendet.
Also Whookie verwendet diesen Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
LSHA1: THashSHA1;
LFile: TMemoryStream;
begin
if OpenDialog1.Execute then
begin
LFile := TMemoryStream.Create;
try
LFile.LoadFromFile(OpenDialog1.FileName);
LSHA1 := THashSHA1.Create;
LSHA1.Update(LFile.Memory, LFile.Size);
Edit1.Text := LSHA1.HashAsString;
finally
LFile.Free;
end;
end;
end;
Da wird der Zeiger auf den internen Buffer und die Größe übergeben. Er übergibt NICHT LFile direkt.