![]() |
AW: Rückgabe von CommandLineToArgvW
Zitat:
Delphi-Quellcode:
der Wert von TempArgs zugewiesen wird.
TempArgs := CommandLineToArgvW(GetCommandLineW, NumArgs);
|
AW: Rückgabe von CommandLineToArgvW
Ja, das ist wohl war. Es gibt viele Wege zum Ziel. Es geht auch so:
Delphi-Quellcode:
Gegenüber der Lösung in Antwort #6 sieht das hier zwar nicht so schön aus, dafür übersteht es aber eine Bereichsprüfung.
procedure GetCommandLineArgs(Args: TStrings);
var NumArgs: Integer; TempArgs, p: PPWideChar; i: Integer; begin TempArgs := CommandLineToArgvW(GetCommandLineW, NumArgs); try if TempArgs <> nil then begin p := TempArgs; for i := 0 to NumArgs - 1 do begin Args.Add(p^); Inc(p); end; end else RaiseLastOSError; finally LocalFree(THandle(TempArgs)); end; end; |
AW: Rückgabe von CommandLineToArgvW
Man muss Prioritäten setzen. Schönheit oder Korrektheit. :wink:
|
AW: Rückgabe von CommandLineToArgvW
Naja, das try finally ist hier garnicht notwendig und macht es imo unübersichtlich. Besser sollte es weg und das LocalFree in die if-Bed mit rein.
|
AW: Rückgabe von CommandLineToArgvW
Also so:
Delphi-Quellcode:
procedure GetCommandLineArgs(Args: TStrings);
type TPWideCharArray = array[0..0] of PWideChar; var NumArgs: Integer; TempArgs: PPWideChar; i: Integer; begin TempArgs := CommandLineToArgvW(GetCommandLineW, NumArgs); if TempArgs <> nil then begin for i := 0 to NumArgs - 1 do Args.Add(TPWideCharArray(TempArgs^)[i]); LocalFree(THandle(TempArgs)); end else RaiseLastOSError; end; |
AW: Rückgabe von CommandLineToArgvW
Nunja, ich hatte auch darüber nachgedacht, ob das try finally notwendig ist. Ich hatte es drinn gelassen, weil die Add-funktion bei einer leeren Liste (args=nil oder args nicht gültig) eine Exception erzeugen würde. Falls man den Fall LocalFree(0) abfangen möchte (was ich nicht für notwendig halte), dann könnte man das ja auch noch auf anderen Wegen erreichen.
|
AW: Rückgabe von CommandLineToArgvW
Zitat:
Zitat:
Delphi-Quellcode:
Es müste auch funktionieren, wenn du das ^ weglassen würdest.
for i := 0 to NumArgs - 1 do
Args.Add(TempArgs[i]); Über ^ dereferenzierst du den PPWideChar und der Index [i] wird dann als Zeichenindex im 1. PWideChar gezählt. Ohne ^ wäre es aber der Index im PPWideChar, also im Array. bzw. so müßte es auch gehn.
Delphi-Quellcode:
type TTempArgs: array[0..0] of PWideChar;
var TempArgs: ^TempArgs; TempArgs := Ponter(CommandLineToArgvW(GetCommandLineW, NumArgs)); ... for i := 0 to NumArgs - 1 do Args.Add(TempArgs[i]); |
AW: Rückgabe von CommandLineToArgvW
Danke für die Erklärung.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 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