AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Gemeinsamer Vorfahre von DEC THash_XYZ gesucht (erledigt)
Thema durchsuchen
Ansicht
Themen-Optionen

Gemeinsamer Vorfahre von DEC THash_XYZ gesucht (erledigt)

Ein Thema von a.def · begonnen am 3. Mai 2017 · letzter Beitrag vom 3. Mai 2017
Antwort Antwort
a.def
(Gast)

n/a Beiträge
 
#1

Gemeinsamer Vorfahre von DEC THash_XYZ gesucht (erledigt)

  Alt 3. Mai 2017, 09:32
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:
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));
Ich dachte eigentlich TDECHash wäre der gemeinsame Vorfahre, aber der Code gibt eine AV zurück, welche ich nicht zurückverfolgen kann.

Geändert von a.def ( 3. Mai 2017 um 10:42 Uhr)
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht

  Alt 3. Mai 2017, 09:40
Der Parameter müsste TDECHashClass heißen, nicht TDECHash, sonst würdest Du ja ein Objekt übergeben...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht

  Alt 3. Mai 2017, 09:42
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#4

AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht

  Alt 3. Mai 2017, 09:43
Dann bekomme ich leider den Fehler
Zitat:
[dcc32 Fehler]Inkompatible Typen: 'TDECHashClass' und 'TDECHash'
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht

  Alt 3. Mai 2017, 10:17
Wie rufst du denn CalcHash auf?.
So sieht das bei mir aus
Delphi-Quellcode:
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;
Aufruf lautet s := CalcHash(s, TDECHash(THash_SHA256));
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht

  Alt 3. Mai 2017, 10:23
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.
Ich verwende das schon lange erfolgreich, daher die Korrektur

Da typecasten im Aufruf sollte noch weg...
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#7

AW: Gemeinsamer Vorfahre von DEC THash_XYZ gesucht

  Alt 3. Mai 2017, 10:39
Delphi-Quellcode:
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);
Funktioniert ausgezeichnet, Danke!

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.

Geändert von a.def ( 3. Mai 2017 um 10:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz