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/)
-   -   WinExec, AnsiString und String und Delphi XE (https://www.delphipraxis.net/162079-winexec-ansistring-und-string-und-delphi-xe.html)

marcoX 5. Aug 2011 01:12

WinExec, AnsiString und String und Delphi XE
 
Delphi-Quellcode:
WinExec(PAnsiChar('net user /add testuser '+PasswortVar),SW_HIDE);
Hallo,
ist es normal, dass o.g. Code nur funktioniert, sofern PasswortVar als AnsiString deklariert ist? Wenns ein String ist, funktioniert es in Delphi XE nämlich nicht ( in 2006 schon).

Luckie 5. Aug 2011 01:31

AW: WinExec, AnsiString und String und Delphi XE
 
Win Exec gilt schon lange als veraltet und dient nur noch der Unterstützung von 16-Bit Programmen. Nimm lieber shellexecute, ShellexecuteEx oder CreateProcess. Un der Code funktioniert deshalb nur mit AnsiString weil der Datentyp String ab Delpghi2009 standardmäßig ein WideString (Unicode) ist.

jaenicke 5. Aug 2011 05:03

AW: WinExec, AnsiString und String und Delphi XE
 
Und mit den genannten Funktionen kannst du dann auch auf PChar statt PAnsiChar casten. Das ist in XE dann ein PWideChar, so dass auch Unicodezeichen im Dateinamen funktionieren.

himitsu 5. Aug 2011 08:35

AW: WinExec, AnsiString und String und Delphi XE
 
Wobei man doch den Grund des Nichtfunktionierens hätte auch seber hätte rausbekommen können,
wenn man mal auf das hört, was einem der Compiler und die Dokumentation sagt.
  • ANSI: WinExec ist mit LPCSTR deklariert (in den Delphi-Sourcen und auch im MSDN), welches man auf PAnsiChar zurückverfolgen kann
  • String/UnicodeString geht nicht: Ja, da wirft Delphi einem doch etwas von "unsicherer Typumwandlung" um die Ohren und das nicht umsonst
    • Hinweise: kann man drauf hören / zumindestens gelesen sollte man es haben
    • Warnungen: sollte man beachten ... wenn nicht ... tja, das hast'e ja gerade mitbekommen
    • Fehler / Fatale Fehler: kann man eh nicht überhören und muß es beheben


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