weiter probiert und mit
PByte()
kann ich ohne Fehler kompilieren.
So sieht die Aufruffunktion jetzt aus:
Delphi-Quellcode:
function ErzeugeSolarisCRCWord(Text: string): word;
var
tmpAnsiString: AnsiString;
tmpPAnsiCharByte,
tmpPAnsiString: PByte;
tmpPAnsiChar: PAnsiChar;
tmpLength: Byte;
tmpTextLength,
i : integer;
begin
// initialisieren
result := 0;
tmpTextLength := Length(Text);
// validieren
if ((tmpTextLength = 0) or (tmpTextLength > 256)) then
exit;
// Merker setzen
tmpAnsiString := Erzeuge8BitCharString(Text);
i := 1;
tmpPAnsiString := Addr(tmpAnsiString);
tmpPAnsiChar := Addr(tmpAnsiString[i]);
tmpLength := Length(tmpAnsiString);
tmpPAnsiCharByte := PByte(tmpPAnsiChar);
// CRC berechnen
// function cal_crc_half(pin: PByte; len: Byte): Word;
result := cal_crc_half(tmpPAnsiCharByte, tmpLength);
end;
Beim Test sind jetzt in
function cal_crc_half(pin: PByte; len: Byte): Word;
folgende Werte abrufbar (<STRG>+<F7>):
Delphi-Quellcode:
ptr = $B7980C
ptr^ = 81
Char(ptr^) = 'Q'
Ok, soweit läuft das also.
Leider bin ich nun zurück bei meinem Ausgangsproblem - der CRC Berechnung.
Ich erhalte als CRC Wert $D2$36
Laut der Doku der CRC-C-Routine sollte jedoch der CRC für "QPIGS" den Wert $B7$A9 lauten.
Also ist entweder
A - die "Übersetzung C->Delphi" nicht korrekt
B - die Doku falsch
C - oder ich mache noch einen völlig anderen Fehler
Tipps und Hinweise sind ausdrücklich willkommen!