Zitat von
Olli:
Suche hier:
http://jedi-apilib.cvs.sourceforge.n...11&view=markup
nach "RtlUlongByteSwap" und kopiere den Code. Ist von mir und du darfst es auch ohne die
MPL/
LGPL verwenden. Wegen einem zweibytigen Opcode muß ich keine Erwähnung irgendwo haben
Ach was, hier ist sie:
Delphi-Quellcode:
function RtlUlongByteSwap(Source: ULONG): ULONG;
asm
// This is not written as mnemonics to be compatible with D4!
db 0Fh, 0C8h
// "bswap EAX" can only be executed on 486+!!!
(*
// Does the same but perhaps slower ...
// Source = $11223344
rol AX, 08h // Source = $11224433
rol EAX, 0Fh // Source = $44331122
rol AX, 08h // Source = $44332211
*)
end;
Hrm.
Ich habe die jetzt so eingebaut:
Delphi-Quellcode:
function TPLCDataModule.SwapBytes(Source: DWORD): DWORD;
asm
// This is not written as mnemonics to be compatible with D4!
db 0Fh, 0C8h
// "bswap EAX" can only be executed on 486+!!!
end;
Gibt nur ein Problem damit:
Seltsamerweise liefert die IMMER 888723972 zurück.
Das hier liefert übrigens den richtigen Wert:
Result := Cardinal( (FData^[AIndex] shl 24) + (FData^[AIndex + 1] shl 16) + (FData^[AIndex + 2] shl 8) + FData^[AIndex + 3] );
Aber ich befürchte, das ist um ca. den Faktor vier langsamer, als die Teile am Block rauszulesen.
Oder kann mich da wer beruhigen?