Warum es knallt wenn du einen Pointer auf den Stack packst und den als WideString interpretierst wird wohl daran liegen, dass Strings in Pascal noch Zusatzinfos vor dem aktuellen Pointer haben. Bei Strings sind es 12 Bytes. Wie viel es bei WideStrings sind weiß ich nicht. Aber ich denke mal es werden auch 12 Byte sein.
Also bei WideStrings solltest du auch WideStrings vergleichen und nicht nur Bytes. Bei 'Test' macht es zwar keinen Unterschied allerdings bei allen anderen Zeichen ist das Ergebnis nicht richtig, da du das Zweite einfach Stumpf ignorierst.
Ich würde dir Empfehlen permanent mit pWideChar zu arbeiten. Das ist dann einfach nur konsequent und vereinfacht auch das verstehen des Codes.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Function compareUC(s1, s2:PWideString):boolean; var i:Integer; begin Result:=true; While(s1^ <> 0) and (s2^ <> 0) do begin If(s1^ <> s2^) then begin Result:=false; break; end; Inc(s1); Inc(s2); end; If((Result) and (((s1^=0) and (s2^<>0)) or (bp2^=0) and (bp1^<>0))) then Result:=false; end; |
An dem Code könnte man so sicherlich noch etwas machen. Allerdings wenn es nichts Zeitkritisches ist genügt das vollkommen. Mit der Optimierung von Delphi dürfte das doppelte Referenzieren aber auch optimiert werden.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.