Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#312

AW: himXML (gesprochen himix ML)

  Alt 1. Nov 2016, 10:57
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat