Ich war damals sehr pragmatisch und habe den Teil mit dem Assembler Code folgendermaßen abgeändert :
Delphi-Quellcode:
{$IFDEF Win32}
Class Function TXHelper.Pos(
Const Sub, S: TWideString): Integer;
ASM
PUSH EBX
PUSH ESI
PUSH EDI
TEST EDX, EDX
JE @@Zero
TEST ECX, ECX
JE @@Zero
MOV ESI, EDX
MOV EDI, ECX
MOV ECX, [EDI-4]
{$IFDEF hxDisableUnicodeString}
SHR ECX, 1
{$ENDIF}
MOV EDX, [ESI-4]
{$IFDEF hxDisableUnicodeString}
SHR EDX, 1
{$ENDIF}
DEC EDX
JS @@Zero
MOV AX, [ESI]
ADD ESI, 2
SUB ECX, EDX
JLE @@Zero
PUSH EDI
@@Loop:
REPNE SCASW
JNE @@Fail
MOV EBX, ECX
PUSH ESI
PUSH EDI
MOV ECX, EDX
REPE CMPSW
POP EDI
POP ESI
JE @@Found
MOV ECX, EBX
JMP @@Loop
@@Fail:
POP EDX
@@Zero:
XOR EAX, EAX
JMP @@Exit
@@Found:
POP EDX
MOV EAX, EDI
SUB EAX, EDX
SHR EAX, 1
@@Exit:
POP EDI
POP ESI
POP EBX
End;
{$ENDIF}
{$IFDEF Win64}
Class Function TXHelper.Pos(
Const Sub, S: TWideString): Integer;
begin
result := System.Pos(Sub, S);
end;
{$ENDIF}
Denn der Assembler-Code ist nur eine schnellere Variante der POS-Funktion aus der System-
Unit. Aber wenn Du den Teil so ersetzt, funktioniert es auch mit 64Bit. Die Quelle ist die himxml_164.7z oben aus den Downloads.