STARGÅTE hat geschrieben:da ich inzwischen auch an einem 64-Bit System testen kann, bin ich auf folgendes problem gestoßen:
CRC32Fingerprint gibt eine Integer zurück, statt einer Long.
Wenn Du es in eine Long-Variable speicherst, dann geht es.
Code: Alles auswählen
Buffer.l = 1234
result.l = CRC32Fingerprint(@Buffer, SizeOf(Long))
Debug result
Die Hilfe vom neuen PB4.60 zeigt leider nicht den Typ an, der zurückgegeben wird.
Somit sollte es Integer sein, aber es wäre wünschenswert, wenn das PB-Team und
die Hilfeschreiber den Rückgabetyp überall wirklich angeben.
Unabhängig davon generiert Dein original Code:
wohl auch einen anderen CRC32 weil die Variable 'Buffer' Integer ist (da keine Typangabe),
und somit ist die Variable einmal 32bit und einmal 64bit.
Die Funktion rufst Du dann aber mit Size 4 auf, was mit PB 64bit nur den halben
Buffer nimmt.
Mit meinem obigen Code solltest Du weiter kommen, also den Rückgabewert direkt
in einer Long-Variable speichern.
Macht ja Sinn das CRC32 einen 32bit-Wert zurückgibt. Sollte in der Hilfe erwähnt werden.
Das sollte aber richtig funktionieren:
Code: Alles auswählen
Buffer.l = 1234
result.i = CRC32Fingerprint(@Buffer, SizeOf(Long))
Debug result
Gibt aber unterschiedliche Werte. Sieht aus wie ein Bug, denn der
32bit Rückgabewert der Funktion sollte so automatisch nach Integer
konvertiert werden.
Somit hast Du Recht!

In Deinem Code war nur noch dieser zusätzliche Fehler drin.
Scheint ein Bug in der Funktion (oder deren Library-Deklaration)
und in der Hilfe zu sein.
Damit hast Du den ersten offiziellen Bug für 4.60 Final gefunden. Glückwunsch!
