Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   System.write in XE2 (https://www.delphipraxis.net/163812-system-write-xe2.html)

Mavarik 17. Okt 2011 16:51

System.write in XE2
 
Hallo Zusammen!

Ich muss gerade feststellen, dass System.Write einen Shortstring erwartet..

Bedeutet:

Delphi-Quellcode:
system.write(F,'Das ist ein toller Text'); // <--- Fehler Shortstring erwartet
Also jedemmal mit ShortString('XXX') casten...

Ist das nicht eine inkonsequente Umsetztung?

Mavarik :coder:

p80286 17. Okt 2011 17:12

AW: System.write in XE2
 
Da xe2 wohl bei Strings immer von 16Bit-Char ausgeht, würde ich sagen "das nervt ist aber verständlich"

Gruß
K-H

Mavarik 17. Okt 2011 17:25

AW: System.write in XE2
 
Zitat:

Zitat von p80286 (Beitrag 1130887)
Da xe2 wohl bei Strings immer von 16Bit-Char ausgeht, würde ich sagen "das nervt ist aber verständlich"

Gruß
K-H

Nöö wieso kann ich keine Unicode-String mit write schreiben?

Mavarik

p80286 17. Okt 2011 17:31

AW: System.write in XE2
 
Ich geh davon aus, daß da der gute alte Pascalstring hinter steckt, also in [0] die Längenangabe und dann der eigentliche Inhalt. mit einem Move(mystring[1],pascalstring[1],#bytes) solltest du auch die 16Bitter schreiben können, eben nur mit einen max. Länge von 127.
(passt dann eigentlich das CRLF noch????????)

Gruß
K-H

himitsu 17. Okt 2011 17:36

AW: System.write in XE2
 
Wieso ShortString?
Ich war der Meinung das Ding war immer schon AnsiString,
und bei der Umstellung auf Unicode hat man daran nichts geändert.
Aus Faulheit Kompatibilitätsgründen, damit wir bei der Unicode-Umstellung keine Probleme bekommen.

(genauso wie AnsiSameText jetzt standardmäßig Unicode und kein ANSI spricht :stupid: )


Man kann dort keinen EncodingParameter angeben und da früher alle Dateien immer als ANSI gespeichert wurde, wurde dieses Verhalten nicht verändert.
Früher der WideString und nun auch der UnicodeString wurden daher schon immer nach ANSI konvertiert.

bernau 17. Okt 2011 17:42

AW: System.write in XE2
 
Nicht konsequent, aber in gewisser Weise verständlich.


Mit
Delphi-Quellcode:
AssignFile(F, aFilename);
gebe ich an, daß Write in eine Textdatei schreiben soll. Wie ist diese Textdatei den Kodiert? Wäre fatal, wenn auf einmal alle erzeugten Textdateien nicht mehr 8BitAnsi sind.

Mavarik 17. Okt 2011 17:51

AW: System.write in XE2
 
Zitat:

Zitat von himitsu (Beitrag 1130896)
Wieso ShortString?

Ja genau das war doch die Frage...

Delphi sagt mir das ein System.Write(F,...

Als 2. Parameter einen Shortstring erwartet!

himitsu 17. Okt 2011 19:55

AW: System.write in XE2
 
Caste den Text nach String/AnsiString.


nachgesehn:
Delphi-Quellcode:
function _Write0Char(var t: TTextRec; c: AnsiChar): Pointer;
function _Write0Bool(var t: TTextRec; val: Boolean): Pointer;
function _Write0Long(var t: TTextRec; val: Longint): Pointer;
function _Write0String(var t: TTextRec; const s: ShortString): Pointer;
function _Write0CString(var t: TTextRec; s: PAnsiChar): Pointer;
function _WriteLString(var t: TTextRec; const s: AnsiString): Pointer;
function _WriteWString(var t: TTextRec; const s: WideString): Pointer;
function _Write0WChar(var t: TTextRec; c: WideChar): Pointer;
function _Write0Variant(var T: TTextRec; const V: TVarData): Pointer; // Variant
...
ShortString ist der erste String-Typ (mehr als ein Zeichen), also wird dieser Typ für die Fehlermeldung verwendet.


Leider durfte ich auch schon mitbekommen, daß seit D2009 Delphi es nicht mehr hinbekommt sich zu entscheiden, wenn mehrer Stringtypen überladen sind und man eine "Konstante" direkt übergeben will. :cry:
Ich bin mir auch sicher, daß es dazu schon mehrere QC-Einträge gibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 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