Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: System.PPWideChar (ja mit zwei P)

  Alt Gestern, 16:29
Grundsätzlich ist PPWideChar erstmal nicht anderes, als ein Zeiger auf einen Zeiger, auf einen StringInhalt, welcher mit #0 terminiert ist.

Wenn es ein Zeiger auf eine Liste von PWideChars sein soll, dann kommt es halt drauf an.
* ist dise Liste ebenfalls 0-terminiert, also mit einem NIL als letzten Eintrag
* ist die Länge vordefiniert
* oder wird die Länge extern weitergegeben (z.B. ein weiterer Count-Parameter)

Da die LongStrings (String, AnsiString, UnicodeString usw.) und auch WideString (SysAllocString) zur eigentlichen Längenangabe (Integer) implizit auch eine terminierende #0 enthalten,
sind die "lesend" kompatibel mit PChar/PAnsiChar/PWideChar und können direkt gecastet/genutzt werden.

Somit kannst zu auch einfach ein var MeinArray: array of string; nutzen (ab Delphi 2009), bzw. mit WideString oder UnicodeString,
und dann einfach nach PPWideChar oder Pointer casten und an den PPWideChar-Parameter übergeben.
Pointer(MeinArray)

Wenn NIL als Listenabschluß, dann einfach einen Leerstring '' , als letzten Eintrag.

ACHTUNG, einen LeerStringm NICHT den Scheißtdreck namens EmptyStr , denn das ist kein NIL, sondern ein Zeiger auf #0.
ACHTUNG, auch PChar/PAnsiChar/PWideChar auf eine LeerString-Variable/Konstante gibt "EmptyStr" zurück. (PChar-Casts sind keine Casts, sondern böse CompilerMagic, welche auf _UStrToPWChar in der System.pas weiterleitet.
(EmptyStr ist auch noch eine beschissene Variable und keine Konstante)



PS: Es gibt auch noch C-Arrays, wo alle Strings in einem Speicher hintereinander liegen,
jeweils durch ein #0 getrennt und mit zwei #0#0 als Listenabschluß (quasi ein leerer String als Letztes).
z.B. die MultiString-Values in der Registry
Das ist auch der Grund, warum indizierte ENUMS in Delphi keine TypeInfo über ihre ElementNamen besitzen, da leere Strings in der Liste nicht möglich sind.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (Gestern um 16:32 Uhr)
  Mit Zitat antworten Zitat