Moin moin,
ich versuche die MD5 Proceduren aus der Microsoft Cryptdll.dll zu benutzen,
leider tritt dabei beim Ausführen folgendes Codes eine AccessViolation bzw. Priviligierte Instruktion auf.
Ich nehme an das mit den Aufrufen der Funktionen etwas schief läuft ... die Aufrufkonventionen müsste aber stimmen, ist ja aus der Windows
API
Delphi-Quellcode:
// ...
uses classes;
// Windows Cript API imports
type MD5_CTX =
packed record
i:
packed array[0..1]
of longint;
// ULONG[2]
buf:
packed array[0..3]
of longint;
// ULONG[4]
_in:
packed array[0..63]
of byte;
// unsigned char[64]
digest:
packed array[0..15]
of byte;
// unsigned char[16]
end;
procedure MD5Init(
var MD5_CTX);
stdcall;
external '
Cryptdll.dll'
name '
MD5Init';
procedure MD5Update(
var MD5_CTX;
const input; inputLength: longint);
stdcall;
external '
Cryptdll.dll'
name '
MD5Init';
procedure MD5Final(
var MD5_CTX);
stdcall;
external '
Cryptdll.dll'
name '
MD5Init';
function StreamToMD5String(x: TStream):
string;
// suboptimaler Funktionsname
implementation
function StreamToMD5String(x: TStream):
string;
var context: MD5_CTX;
buffer:
packed array[0..511]
of byte;
length: integer;
begin
MD5Init(context);
x.Position := 0;
repeat
length := x.
Read(buffer, 512);
MD5Update(context, buffer, length);
until length <= 0;
MD5Final(context);
end;
// ...
Problematisch bei der Übersetzung/Einbindung ist folgendes:
Code:
procedure MD5Update(
var context: MD5_CTX,
input: sequence of BYTE,
inputLen: integer)
[
Quelle]
Was ist "
sequence of BYTE"?
Pointer hab ich schon probiert (s.o.)...
Ich freue mich über sachdienliche Hinweise
MfG,
Bug