Autor Beitrag
Fetz
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 18.04.08 16:18 
Hallo,

ich würde gerne die Prüfsumme (SHA1) einer Datei mit delphi ermitteln. Nach einigem Suchen habe ich genügend Hinweise gefunden, dazu DEC zu verwenden. Wie in einigen Beiträgen zu lesen ist, scheint das im allgemeinen auch zu gelingen. Ich habe nach einigem rumsuchen auch eine Datei DEC_5_1c.zip gefunden und die entsprechenden Units aus dem Ordner Part I in mein Projekt eingebunden.
Beim Aufruf der entsprechenden Funktion
ausblenden Delphi-Quelltext
1:
SHA1Checksum := THash_SHA1.CalcFile(edit_File.Text, nil, fmtHEX);					

Den Aufruf habe ich in dieser Art in einem Forenbeitrag gefunden. Die daraus resultierende Fehlermeldung lautet "Undefinierter Bezeichner fmtHEX".
Jetzt habe ich weiter rumgestöbert und habe zahlreiche Quellen gefunden, dass der Funktionsaufruf wohl richtig ist. Die Unit DECUtil.pas ist bei mir eingebunden. Allerdings sieht sie bei mir so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
unit DECUtil;
{$I VER.INC}

interface

uses Windows, SysUtils, Classes, CRC;

type
  Binary         = String;  // LongString with Binary Contens
{$IFNDEF VER_D4H}
  LongWord       = type Integer;
{$ENDIF}
  PLongWord      = ^LongWord;
  PByte          = ^Byte;

Auf koders.com sieht der entscheidende Abschnitt aber so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
unit DECUtil;

interface

uses SysUtils, Classes;

{$I VER.INC}

const
// String Formats
  fmtDEFAULT     =    -1;     // use DefaultStringFormat
  fmtNONE        =     0;     // allways an Empty String, nothing Action
  fmtCOPY        =     1;     // One to One binary (input = output)
  fmtHEX         =    16;     // Hexadecimal
  fmtHEXL        =  1016;     // Hexadecimal lowercase
  fmtMIME64      = $1064;     // MIME Base 64
  fmtUU          = $5555;     // UU Coding  $5555 = 'UU'
  fmtXX          = $5858;     // XX Coding  $5858 = 'XX'

// 2 - 64 reserved for Formats to the Base 2 - 64
// over 1000 all other Formats

type
{$IFNDEF VER_D4H}
  LongWord       = LongInt;
  PLongWord      = ^LongWord;
{$ENDIF}
  PByte          = ^Byte;
  PInteger       = ^LongWord;


Habe ich eine falsche Version erwischt? Falls ja, wo finde ich eine richtige Version?
Oder mache ich irgendetwas anderes falsch?

Danke und Gruß, Fetz

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt
Fetz Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 18.04.08 18:50 
Hallo,

so, nach intensivem Grübeln und studieren, haben meine dürftigen Kenntnisse doch ausgereicht, um zu erkennen, dass der im Internet weit verbreitete Funktionsaufruf gegenüber der aktuellen Paketversion veraltet ist.
Der Aufruf mit
ausblenden Delphi-Quelltext
1:
SHA1Checksum := THash_SHA1.CalcFile(edit_File.Text, TFormat_HEXL, nil);					

brachte den gewünschten Erfolg.

Gruß, Fetz

Edit: Bzw. "TFormat_HEX", um analog zum obigen Fall zu bleiben.