Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Parameter der Pfadangabe enthält herrausfinden

  Alt 11. Okt 2013, 11:37
Nur um es mal zu erklären:

Bei Strings kann Delphi, anhand der im "String" versteckten Encoding-Informationen auch unterschiedliche Strings vergleichen.
Bei Char (WideChar) und AnsiChar geht das untereinander leider nicht so gut, weswegen Delphi hier eine "Warnung" anzeigt.
Wobei die Fehlermeldung hier ja eigentlich "'char' zu 'ansichar'" heißen müßte, da aber der Compiler vermutlich versuchte das Problem aufzulösen, ist er erst bei "'string' zu 'ShortString'" gescheitert.

Rechts das OR ist ein Binäres und aus if cParam <> '-or '/then wird ein if cParam <> ('-or '/') then , bzw. if cParam <> Chr(Ord('-') or Ord('/')) then .
Hier wird also zuerst das OR aufgelöst, wobei Delphi hierbei die Chars als erstmal AnsiChar interpretiert. Den Char-Konstante direkt mit dem WideChar (cParam) verbinden, kann der Compier das erkennen und die Konstante ebenfalls als WideChar verwenden.


Delphi-Quellcode:
if cParam <> AnsiChar(Ord('-') or Ord('/')) then
if cParam <> AnsiChar($2D or $2F) then
if cParam <> AnsiChar($2F) then

if cParam <> '/then
Besseres Beispiel (OK, abgesehn davon, daß das Zeichen 127 nicht so schön darstellbar ist)
Delphi-Quellcode:
if cParam <> ('-or '[') then // $2D or $5B = $7F

if cParam <> Chr(127) then // $7F
Und hier knallt es natürlich:
Delphi-Quellcode:
var cParam: string;

if cParam <> 'abcor '123then
(Char ist ein ordinaler Typ, bei dem man mathematische und binäre Operationen anwenden kann, was beim String nicht geht)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Okt 2013 um 11:44 Uhr)
  Mit Zitat antworten Zitat