![]() |
Gemeinsamer Vorfahre von DEC THash_XYZ gesucht (erledigt)
Gibt es einen gemeinsamen Vorfahren der Hashes in DEC welchen ich als Parameter verwenden kann?
Mein Ziel: ich möchte eine einzige Prozedur haben, welcher ich einen String und den Hash-Typ übergeben kann welcher verwendet werden soll. Der Code hier unten stammt aus dem WWW und wurde von mir leicht abgeändert.
Delphi-Quellcode:
Ich dachte eigentlich TDECHash wäre der gemeinsame Vorfahre, aber der Code gibt eine AV zurück, welche ich nicht zurückverfolgen kann.
function CalcHash(input: string; aHashMethod: TDECHash): string;
var val: TStringStream; aHash: TDECHash; len: Int64; begin val := TStringStream.Create; try len := Length(input); val.Write(input[1], len); val.Position := 0; aHash := aHashMethod.Create; try Result := string(aHash.CalcStream(val, len, TFormat_HEX)); finally aHash.Free; end; finally val.Free; end; end; // s := CalcHash(s, TDECHash(THash_SHA256)); |
AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht
Der Parameter müsste TDECHashClass heißen, nicht TDECHash, sonst würdest Du ja ein Objekt übergeben...
|
AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht
Mit TDECHash hätte vorher auch schon im Compiler knallen müssen, wenn du da versuchst eine Klasse zu übergeben.
Wie rufst du denn CalcHash auf? TDECHashClass geht auch nur, wenn Create virtual ist, denn sonst wird da nicht das Create der übergebenen Klasse, sondern nur das von TDECHashClass verwendet. Was hier der Fall ist ... keine Ahnung. |
AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht
Dann bekomme ich leider den Fehler
Zitat:
|
AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht
Zitat:
Delphi-Quellcode:
Aufruf lautet
function CalcHash(input: string; aHashMethod: TDECHash): string;
var val: TStringStream; aHash: TDECHash; len: Int64; begin val := TStringStream.Create; try len := Length(input); val.Write(input[1], len); val.Position := 0; aHash := aHashMethod.Create; try Result := string(aHash.CalcStream(val, len, TFormat_HEX)); finally aHash.Free; end; finally val.Free; end;
Delphi-Quellcode:
s := CalcHash(s, TDECHash(THash_SHA256));
|
AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht
Zitat:
Da typecasten im Aufruf sollte noch weg... |
AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht
Delphi-Quellcode:
Funktioniert ausgezeichnet, Danke!
var
aHashActive: TDECHashClass = THash_SHA256; ... class function THashFunctions_Selftest.CalcHash(input: string): string; var val: TStringStream; aHash: TDECHash; len: Int64; begin val := TStringStream.Create; try len := Length(input); val.Write(AnsiString(input)[1], len); val.Position := 0; aHash := aHashActive.Create; try Result := string(aHash.CalcStream(val, len, TFormat_HEX)); finally aHash.Free; end; finally val.Free; end; end; s := THashFunctions_Selftest.CalcHash(s); Nur um den Grund mal genannt zu haben warum ich DEC verwende statt das mitgelieferte von Delphi: die in Delphi integrierten Hash-Funktionen sind einfach viel zu lahm! Was DEC in 50ms macht dafür braucht der Delphi-eigene Code 200ms. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz