Gibt es ein Gegenstück zum Delete-Verfahren, das für Widestrings verwendet werden könnte? Oder soll ich einfach die resultierenden WideStrings kopieren und verketten?Delphi 2006 system.delete für widestrings?
Antwort
Löschen ist eine "Compiler Magic" -Funktion. Der Compiler verwendet seine Kenntnisse des grundlegenden Datentyps, um die Operation entsprechend zu behandeln. Bei den meisten Arrays können die Informationen, die Sie in Ihren Code schreiben, einfach in den tatsächlichen Offset und die Anzahl der Bytes übersetzt werden, die gelöscht werden müssen, und stattdessen an die Assembly-Routine _Delete
übergeben werden. Für WideStrings, wie Alexander darauf hingewiesen hat, hat es eine spezielle _WStrDelete-Routine.
Fazit: Wenn Sie ein Array oder eine Zeichenfolge an Delete übergeben können und es kompiliert, sollte es gut laufen.
Interne RTL-Funktionen wie Delete, Insert, Length usw. funktionieren sowohl für Ansi als auch für Wide-Strings.
Zum Beispiel wird Delete call on WideString in den WStrDelete-Aufruf umgewandelt (siehe System.pas).
bist du dir sicher? In Delphi 2006 ist es nur eine Assembler-Funktion ... –
Ja, ich bin mir ziemlich sicher - habe es gerade in D2006 überprüft. Delete for String (AnsiString) wird in LStrDelete-Aufrufe konvertiert und Delete for WideString wird in WStrDelete-Aufrufe konvertiert (siehe CPU-Ansicht). – Alex
ja, OK, das habe ich inzwischen auch gemerkt, aber danke trotzdem. –
haha, ich liebe diese Antwort - vor allem, dass Delphi implizite Konvertierung von String zu WideString, wenn es keine überladene Version der Funktion gibt ... –