AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi 2009: String, UnicodeString oder WideString?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 2009: String, UnicodeString oder WideString?

Ein Thema von romber · begonnen am 26. Feb 2010 · letzter Beitrag vom 3. Nov 2014
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#12

AW: Delphi 2009: String, UnicodeString oder WideString?

  Alt 3. Nov 2014, 17:09
Für den genauen Aufbau siehe System.pas, wo es auch seit 2009 ein paar Funktionen zum Auslesen/Bearbeiten gibt, vorallem von der CodePage.


WideString geht schon immer auf die OleAuth32.dll und stellt quasi nur einen Wrapper dar, welcher u.A. auf MSDN-Library durchsuchenSysAllocString weiterleitet. Dafür ist das praktisch in jeder Sprache verfügbar.

String ist ein compilerabhängiger "Alias" und geht auf AnsiString (D2 bis D2007), UnicodeString (seit D2009) und ShortString (D1, wobei es dort nur diesen String gab und es noch keine Alias war)

intern ist es ein aufgemotztes "dynamisches Array"
  • in Windows mit Offset von 1 -> Index 0 = Char 1, wegen Abwärtskompatibilität zum alten ShortString
  • Pointer zeigt auf erstes Zeichen, hinten gibt es noch zwei implizite #0
  • vor dem ersten Zeichen liegen die Integer Länge und Referenzzählung
  • und seit D2009 nochmal davor zwei Word für CodePage und CharSize
  • im Gegensatz zu den normalen dyn. Arrays funktioniert hier auch das CopyOnWrite (Bei Schreibzugriffen auf einzelne Zeichen, mit einem RefCount größer 1, wird eine Kopie angelegt und damit gearbeitet)
  • Konstanten haben einen RefCount von -1


PS: Schaut mal in die OH ... dort tut wirklich manchmal jemand was und man hat den String-Aufbau dort nun auch endlich mal dokumentiert.

Zitat:
außer bei nextgen
Ich bin mir nicht ganz sicher wer, aber entweder im Nextgen oder im Windows kann man per Compilerschalter das Verhalten umstellen.

Delphi-Referenz durchsuchenStringElementSize
Delphi-Referenz durchsuchenStringCodePage / Delphi-Referenz durchsuchenSetCodePage
Delphi-Referenz durchsuchenStringRefCount / Delphi-Referenz durchsuchenUniqueString
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Nov 2014 um 17:15 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz