AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Thema durchsuchen
Ansicht
Themen-Optionen

PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?

Ein Thema von Glados · begonnen am 4. Nov 2017 · letzter Beitrag vom 5. Nov 2017
 
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#20

AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?

  Alt 4. Nov 2017, 21:48
Man sollte immer den für die Aufgabe passenden Typen benutzen, egal in welcher Version von Delphi oder FreePascal (bzw. jeder anderen Programmiersprache). Beispiel:
Delphi-Quellcode:
MessageBox(0, PChar(...));
MessageBoxA(0, PAnsiChar(...));
MessageBoxW(0, PWideChar(...));
Das funktioniert auf allen Delphi-Versionen, egal wie alt oder neu, wahrscheinlich auch mit FreePascal.

Warum nicht sowas wie MessageBox(0, PWideChar(...)); , von dem du ja sagst, die IDE meint, der Parameter wäre PWideChar? Nun, bei einem aktuellen Delphi macht das keinen Unterschied, weil PChar nur ein Alias für PWideChar ist (und MessageBox ein Alias für MessageBoxW), d.h. der Compiler liest den Code als MessageBoxW(0, PWideChar(...)); .

Aber sobald man denselben Code auf einem alten Delphi oder FreePascal benutzen will, kommen Warnungen wegen impliziter String-Umwandlung mit potentiellem Datenverlust. Warum? Weil MessageBox ein Alias ist, genau wie PChar. Der Compiler liest den Code daher als MessageBoxA(0, PWideChar(...)); - Type mismatch. PAnsiChar, PWideChar sowie MessageBoxA und MessageBoxW sind keine Aliase sondern konkrete Typen.

Ist eigentlich gar nicht so schwer zu verstehen. Manchmal braucht man konkrete Typen wie PAnsiChar, PWideChar, in allen anderen Fällen sollte man die Aliase (PChar, String usw) benutzen, weil der Code dann ohne Anpassungen wiederverwendbar ist. Manchmal muss man bei Code nicht nur an sich selbst denken sondern auch Code weitergeben; da ist es sehr hilfreich, wenn dieser korrekt funktioniert und keine Warnungen produziert. Warnungen zu bearbeiten, macht nämlich viel Arbeit (ich bearbeite derzeit derartigen fremden Code...).

Grüße
Dalai

Geändert von Dalai ( 4. Nov 2017 um 21:51 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 00:57 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