AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mein guter Freund Mr. ShellExecute

Ein Thema von alphanumeric · begonnen am 17. Nov 2009 · letzter Beitrag vom 18. Nov 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

Re: Mein guter Freund Mr. ShellExecute

  Alt 17. Nov 2009, 23:59
Klar will ShellExecute bei DIR einen PWideChar, da

Delphi 2009/2010: ShellExecute = ShellExecuteW und das will PWideChar | PChar = PWideChar
"älteres" Delphi: ShellExecute = ShellExecuteA und das will PAnsiChar | PChar = PAnsiChar

Wenn man jetzt das veränderliche ShellExecute mit dem festen PWideChar mischt, dann kann es zu Problemen kommen.
z.B. in Delphi 2007 und älter will ShellExecute einen PChar aka PAnsiChar, wärend in deinem Code PWideChar fest vorgegeben ist.
Und irgendwann kommt UCS4, wo dann ShellExecute das 4-Byte-Unicode will, wärend PWideChar nur ein 2-Byte-Unicode liefert

Also NIEMALS derartige Sachen mischen
Code:
[color=silver]Api[/color] - Char    - String                  - CharArray    - PChar
[color=silver]Api[/color]A - AnsiChar - AnsiString              - AnsiCharArray - PAnsiChar
[color=silver]Api[/color]W - WideChar - WideString/UnicodeString - WideCharArray - PWideChar
Einzig und alleine bei Char und String wäre eine Vermischung möglich, da Delphis CompilerMagic dort eine automatische Typumwandlung implementiert hat, aber auch da "meckert" der Compiler und warnt vor eventuellen Datenverlusten, Aufgrund "unkontrollierter" Umwandlungen.


Wenn Daten nicht Bytegenau und Typsicher gespeichert oder übertagen werden sollen, dann einfach die 1. Variante (mit String und Co.) verwenden, da sie sich an den genutzen Compiler und seine Standardfunktionen anpaßt.
Ansonsten sollte man es genau definieren, damit z.B. bei Compiler/IDE-Upgrade sich nichts verändert.

> Char String PChar Integer Cardinal Pointer und die APIs ohne A/W sind dieser Veränderlichen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Mein guter Freund Mr. ShellExecute

  Alt 18. Nov 2009, 09:02
Das hat Microsoft besser gelöst. Wenn ich dort in einem Programm ShellExecute benutze, wird je nach Kompilereinstellungen ShellExecuteA oder ShellExecuteW benutzt. Wenn ich dann noch das Makro _T (oder so) benutze, dann werden auch die zeichenketten passend konvertiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz